蓝桥杯进制类模板【沈七】

编程入门 行业动态 更新时间:2024-10-11 17:30:47

蓝桥杯进制类<a href=https://www.elefans.com/category/jswz/34/1770549.html style=模板【沈七】"/>

蓝桥杯进制类模板【沈七】

蓝桥杯进制类模板

  • 前言
  • 十进制转任意进制
    • 转换流程
    • 经典习题
  • 任意进制转十进制
    • 转换流程
    • 经典习题
  • 完结散花
  • 参考文献

前言

唤我沈七就好啦。

往期系列文章

蓝桥杯日期类模板

十进制转任意进制

转换流程

1.每次取出 要转化的数 与 要转化的进制 的余数

2.将余数根据大小,转化成要对应进制的正确表达形式

3.将最后得到的字符串翻转

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
string s;
int main()
{LL x;cin>>x;while(x){int a = x % 36; x/=36;if(a<10)s += a + '0';elses += a - 10 + 'A';}reverse(s.begin(),s.end());cout<<s;return 0;
}

经典习题

数圈圈
第一届ACC杯(初赛)A题

十六进制是一种基数为 16 的计数系统,是一种逢 16 进 1 的进位制。

通常用数字 0、1、2、3、4、5、6、7、8、9和字母 ABCDEF 表示,其中: AF 表示 10∼15

,这些称作十六进制数字。观察这些数字的图案,我们可以发现,有些数字上面包含圈圈,具体来说:

数字 0,4,6,9,A,D 中包含一个圈。

数字 8,B中包含两个圈。

数字 1,2,3,5,7,C,E,F 中不含圈。

现在,给定一个十进制整数 n,请你将其转化为十六进制表示,

并数一数其十六进制表示中一共含有多少个圈圈。

输入格式

一个整数 n

输出格式

一个整数,表示整数 n 的十六进制表示包含的圈圈总数。

前三个测试点满足 0≤n≤100, 所有测试点满足 0≤n≤2×10^9 。

输入样例1:

11

输出样例1:

2

题解部分:

在转换进制的时候,特判一下每一位数就好了

#include<bits/stdc++.h>
using namespace std;
string s;
long long ans,n;
int main()
{cin>>n;if(n==0)cout<<1;else{while(n){int  a = n % 16;n/=16;if(a==0||a==4||a==6||a==9||a==10||a==13)ans++;if(a==8||a==11)ans+=2;}cout<<ans;}return 0; } 

任意进制转十进制

转换流程

1.先将要转换的字符串 翻转

2.取出每一位 字符,将其转化成 整型,然后 乘上 本身进制的 i 次方

3.累加

#include<bits/stdc++.h>
using namespace std;
long long  ans,x;
string s;
int main()
{cin>>s;reverse(s.begin(),s.end());for(int i = 0 ; i < s.size();i ++){if(s[i]<='9')x = s[i] - '0';elsex = s[i] - 'A' + 10;ans+=pow(16,i)*x;}cout<<ans;return 0;
}

经典习题

三十六进制

第八届蓝桥杯C语言B组国赛

对于16进制,我们使用字母A-F来表示10及以上的数字。
如法炮制,一直用到字母Z,就可以表示36进制。

36进制中,A表示10,Z表示35,AA表示370

你能算出 MANY 表示的数字用10进制表示是多少吗?

题解部分:

直接套用上面模板即可

#include<bits/stdc++.h>
using namespace std;
long long  ans,x;
string s;
int main()
{cin>>s;reverse(s.begin(),s.end());for(int i = 0 ; i < s.size();i ++){if(s[i]<='9')x = s[i] - '0';elsex = s[i] - 'A' + 10;ans+=pow(36,i)*x;}cout<<ans;return 0;
}

答案:1040254

进制转换

今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :

12 ^ 4+02^ 3+12^ 2+02 ^ 1+1*2^0,

那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。

注意:当系数为0时,该单项式要省略。

输入格式

两个数,M和N,中间用空格隔开。

输出格式

共一行,一个十进制表示的式子。

输入 #1

2 10101

输出 #1

1*2^4+1*2^2+1*2^0

对于100%的数据,1<M<10,N的位数不超过1000。

坑点 :’+’

正常输出的话,无论怎样最后都会多出一个 ’ + ’

所以换个思考方式 : 先 判断 要不要打印 ‘+’ ,
如果是 第一个 或者 当下一位数 为 0 就不需要。
这样就不用考虑最后会多输出一个加号了,因为我们是先判断要不要加号,再计算的。

#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{int n;cin>>n>>s;for(int i = 0 ; i < s.size(); i ++){int x = s[i] - '0';if(i&&x)cout<<'+';if(x)cout<<x<<'*'<<n<<'^'<<s.size()-1-i;}return 0;
}

打印 36 进制的 九九乘法表

#include<bits/stdc++.h>
using namespace std;
string fun(int x)
{string s;while(x){int a = x % 36;x/=36;	if(a< 10)s += a + '0';elses += a - 10 + 'A';}reverse(s.begin(),s.end());return s; 
}
int main()
{for(int i = 1 ; i <= 9 ; i ++){for(int j = 1 ; j <= i ; j ++){printf("%d*%d=",i,j);		cout<<fun(i*j)<<"  ";}puts("");}return 0;
}

完结散花

ok以上就是对 蓝桥杯进制类模板 的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。

参考文献

/

更多推荐

蓝桥杯进制类模板【沈七】

本文发布于:2024-03-07 09:20:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1717433.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模板   蓝桥杯进制类   沈七

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!