C++的进制转化肥肠的经典,首先我们要明白进制转化的原理。
比如说我让二进制转化为十进制,思路就应该是这样:
例如“01011011”,假设位数为n,我就要用1乘2的n - 1次方,公式如下:
01011011(2)=1*2^0+1*2^1+0*2^2+1*2^3+1*2^4+0*2^5+1*2^6+0*2^7(10)=1+2+0+8+16+0+64+0=91(10)
最终的出来的结果是91。
不说废话了,直接上代码:
#include<bits/stdc++.h>
using namespace std;
int n,sum = 0,mi = 1;
string s; //输入的有概率是16进制,所以要用字符串
int a[51]; //10进制不需要字母
int main()
{
cin >> n >> s; //输入要转化的进制和要转化的内容
for (int i = 0;i < s.size();i++) //从头到尾判断一遍
{
if (s[i] >= '0' && s[i] <= '9')
{
a[i] = s[i] - '0';
}
if (s[i] >= 'A' && s[i] <= 'F')
{
a[i] = s[i] + 10 - 'A'; //判断是否为16进制,至于后面为什么是数字的ASCII码+10-'A'就需要读者们自己去思考了
}
}
sum = a[s.size() - 1];
for (int i = s.size() - 2;i >= 0;i--)
{
mi *= n;
sum += a[i] * mi; //将结果合起来
}
cout << sum; //输出结果
}