题目描述
给一个小整数 x 和一个 x 进制的数 S。将 S 转为 10 进制数。对于超过十进制的数码,用 A
,B
,…… 表示。
输入格式
第一行一个整数 x;
第二行一个字符串 S。
输出格式
输出仅包含一个整数,表示答案。
输入输出样例
输入 #1
16 7B
输出 #1
123
说明/提示
【数据规模和约定】
保证目标数在十进制下不超过 10^9,1≤x≤36。
思路
在十进制中:
个位权重是 1,十位权重是 10,百位权重是 100...
所以:
- 十进制,逢 10 进十位,100 进百位,1000 进千位;
- k 进制,逢 k 进第二位,k2 进百位,k3 进千位;
那么如何算出 k 进制数字的 10 进制数字?
例如:(12341)5=1×54+2×53+3×52+4×5+1=971=(971)10
所以,我们就可以用上面讲的内容用编程实现 x 进制转 10 进制。
-
读入 x 和字符串 S:
-
将 S 倒着存入 a,将字母类型变成
int
。
完整代码
#include <bits/stdc++.h>
using namespace std;
int x, a[105];
string s;
int f(char c) {
if('0'<=c&&c<='9') return c-'0';
return c-'A'+10;
}
int main() {
cin>>x>>s;
int len=s.size();
for(int i=len-1;i>=0;i--)
a[len-1-i]=f(s[i]);
int ans=0,w=1;
for(int i=0;i<len+1;i++){
ans+=w*a[i];
w*=x;
}
cout<<ans;
return 0;
}