今天练习了一些进制转换的题型,最经典的还是把一个数转换到相对应进制的数
然后还有一些进制转换会跟字母相关。比如说蓝桥oj上面的年号字串
在做的时候我还发现了一个如果这个数是某进制转换过后的值,我们想得到转换之前的值也有相关的模板我找到的
以前只是单纯的知道,他可以把字符串转换成整型。今天也是收获的一天。
下面来看看题
最经典的一个模板
//这个是把一个数转换成好多进制之后的数
//如果是转换成10进制的数
#include <bits/stdc++.h>
//以前遇见一道题找的是2022的9进制转换成多少进制数
using namespace std;
int main(){
int a[10000000]={0};
int n;cin>>n;//这个是转换的数
int k=0;
while(n){
int cnt=n%2;//这里%多少看你想转换成多少进制的数
a[k]=cnt;
k++;//这点在把数组下标从0到1,然后1到2
n/=2;
}
for(int i=k-1;i>=0;--i){
cout<<a[i];
}
return 0;
}
然后我们来看看下面这个公式有些人肯定知道,字符串转换成整型
ans=ans*9+s[i]-'0';
9是要转换的进制,也可以改成其他的
下面我们来看看相关的题: 蓝桥省赛九进制转十进制
我不知道有没有小白跟我先开始一样,就在想9进制不就是在10进制以内吗??为什么还要转换
还有就是题目要看清楚,好好好。我们继续,我跟大家补充一个知识点
itoa这个函数可以把一个数转换成你想要转换的进制数
itoa(转换的数字,转换的字符数组,转换的进制)
转换的字符数组,记住只能是字符数组,但是在蓝桥oj运行会报错,这个函数的问题,编译器上面确不会出现这个问题,本人亲试有效。
但是还是最好不要使用这个函数。我们继续讲解下面跟字母相关的进制转换
蓝桥的年号字符串这个题,下面是题目以及思路和模板
#include<bits/stdc++.h>
using namespace std;
using ll=long long ;
char a[26]= {'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};;
int main()
{
int n;
cin >> n;
string s = "";
while(n){
n--;// 因为26进制是 0 - 25,而题目中表示是 1 - 26,所以每一位都减1
int m = n % 26;
s += a[m];
n /= 26;
}
int sum=(int)s.size();
for(int i=sum-1;i>=0;--i){
cout<<s[i];
}
return 0;
}
如果嫌弃麻烦可以使用reverse调转一下
在写的时候,我们要注意里面的细节,就比如上面的n--;