在c/c++中,八进制数前面要加一个数字0,例如076表示八进制数76,十六进制数在前面要加一个0x,例如0x15表示十六进制数15,但其他进制的数没有表示方法,这个我们就要借助字符串来解决问题,把其他进制的数(如19进制数)转换为十进制数。
思路如下:
1、0~9这十个字符很简单,直接用就行了;
2、A~Z这26个大写字母要分别对应10~35,所以用的时候要减去一个字符‘7’,这样就对应了;
3、用一个专门算含有指数式子的函数,pow(m,n),例如pow(2,5)算的就是2的五次方,用这个函数需要包含头文件math.h。
知道的上面的基本思路之后就好操作了,下面是代码
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int i, m, k = 0, lengh, b1, b2, q;
char a[1000], ch;
cin >> m;
cin >> a;
lengh = strlen(a);
q = lengh - 1;
for (i=0;i<lengh;i++)
{
ch = a[i];
if (ch >= '0'&&ch <= '9'&&ch - '0' < m) //处理0-9的字符,不能包含大于等于进制数的字符
{
b1 = a[i] - '0';
k = k + b1 * pow(m, q--);
}
if (ch >= 'A'&&ch <= 'Z' && (ch - 'A') < m - 10) //处理A-Z的字符,不能包含大于等于进制数的字符
{
b2 = a[i] - '7';
k = k + b2 * pow(m, q--);
}
}
cout << k << endl;
system("pause");
return 0;
}
以上就是2~36进制数转换为10进制数的方法,希望对你有所帮助。