标签:
这是我从一本书搬来的......
算法流程是这样的:
1.先把x进制转成10进制,s[i]*x^i(i = 0..n-1)的和就是x进制在10进制下的表示。
但是在原程序中它却不是这样的形式,我也看不懂,如果记不住就朴素一点,模拟刚才的算法
2.再把10进制转成y进制,用短除法,一直取余,结果要倒着输出...
以下是代码:
#include <cstdio> #include <string> using namespace std; string transform(int x,int y,string s){ string res = ""; int sum = 0; for (int i = 0;i<s.length();++i) { if (s[i] == ‘-‘) continue; if (s[i]>=‘a‘&&s[i]<=‘z‘) s[i] = s[i]-‘a‘+‘A‘; if (‘0‘<=s[i] && ‘9‘>=s[i]) sum = sum*x+s[i]-‘0‘; else sum = sum*x+s[i]-‘A‘+10; } while (sum) { char tmp = sum % y; sum /= y; if (tmp<=9) tmp += ‘0‘; else tmp = tmp-10+‘A‘; res = tmp+res; } if (res.length() == 0) res = "0"; if (s[0] == ‘-‘) res = ‘-‘+res; return res; } int main() { int a,b; char t[30] = ""; scanf("%d %s %d",&a,t,&b); printf("%s",transform(a,b,t).c_str()); }
求轻喷......
标签:
原文地址:http://www.cnblogs.com/sorhri/p/jz.html