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;
}