各种进制转换成十进制

来源:互联网 发布:网络流行歌曲2016 编辑:程序博客网 时间:2024/06/04 19:07

OJ题目中的进制转换

HDU 的 OJ 有这样一道题,让我输入各种数字,并再括号里面表明进制,如:
2( 3) 表示 三进制的2
然后计算出输入数字的十进制的和
这道题实质上考察的是各种进制转换成十进制的问题

首先在输入方面,我一开始卡在了如何读取括号中的数字这里,搞了一堆判断左括号(的代码…………后来发现只需要

scanf("%d(%d)",&a,&b);

这样就行了(一口老血喷出)
言归正传,关于进制的转换,我们首先要知道各种进制转换成十进制的公式
例如:abcde (几进制)
十进制 = a * (几进制)^4 + b * (几进制)^3 + c * (几进制)^2 + d * (几进制)^1 + a * (几进制)^0;
对于输入的数据,我们需要倒序带入公式算,这里可以用到取模%实现
乘方:第一个数是乘0次方,就是1嘛 第二个数开始才是乘进制的n次方,可以通过递增乘的数实现(第一轮是1,每一轮*=进制)
然后让abcde / 10, 这时候再取模就可以得到倒数第二个数

while(a)            {                q = a%10;                k += p*q;                p *=b;                a /= 10;            }            ans += k;        }
原创粉丝点击