01进制转换
【问题描述】
将任意一个n进制整数x转换成十进制。
【输入格式】
第1行1个正整数n,1<n<10;
第2行1个整数x。
【输出格式】
一行一个数,表示转换得到的十进制数,保证答案不超过 2147483647。
【输入样例】
2
10010
【输出样例】
38
【问题分析】
在本题中,要求读入一个正整数n(代表n进制)和整数x(代表具体的进制数),最后输出转换后的十进制数。
在这里我们需要根据n和x的位数,分别求出x的每一位对应的“权值”,然后穷举每一位,将它乘以该位对应的权值,累加即可得到结果。
这样的算法比较复杂,写下来会并不高效。而更加高效的解法则是采用“秦九韶公式”。对于样例输入,我们可以做这样的计算:
(((((1*2)+0)*2+0)*2+1)*2+1)*2+0=38。
具体的实现是采用“迭代法”,即用一个变量不断乘以n,再加上下一位x[i]。
参考代码如下:
#include<iostream>
using namespace std;
int main()
{
int n,ans=0,i=0;
char s[32];
cin>>n;
while((s[i]=getchar())!='\n')
{
ans=ans*n+(s[i]-48);
i++;
}
cout<<ans;
return 0;
}