描述
N进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。
在本题中,我们将给出N个不同进制的数。你需要分别把它们转换成十进制数。
输入描述
输入的第一行为一个十进制表示的整数N。接下来N行,每行一个整数K,随后是一个空格,紧接着是一个K进
制数,表示需要转换的数。保证所有K进制数均由数字和大写字母组成,且不以 0 开头。保证K进制数合法。
保证N<=1000 ;保证2<=K<=16
保证所有K进制数的位数不超过9。
输出描述
输出N行,每一个十进制数,表示对应K进制数的十进制数值。
举个栗子:
1
16 3F0
逐步分解:
个位为0,累加0*(16^0)(sum=0);
十位为F(转化为十进制的15),累加15*(16^1)(sum=240);
百位为3,累加3*(16^2)(sum=1008);
所以答案为1008。
关键是对ASCII码的了解。
#include <bits/stdc++.h>
using namespace std;
int n,k,a[20],sum;
string x;
int main(){
cin>>n;
while(n--){
sum=0;
cin>>k>>x;
int q=1;
while(q<=x.length()){
if(x[q-1]>='A'){
a[q]=int(x[q-1]-55);
}
else a[q]=int(x[q-1]-48);
sum+=a[q]*pow(k,x.length()-q);
q++;
}
cout<<sum<<endl;
}
return 0;
}