把2到36进制数转换为10进制数

       在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进制数的方法,希望对你有所帮助。

猜你喜欢

转载自blog.csdn.net/weixin_44341938/article/details/88836285
今日推荐