不就是个进制转换嘛,写的这么复杂
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int solve(int in[],int out[], int a, int b) { int i, j, k=0, yu, temp[1000]; while(in[0]>0) { memset(temp,0,sizeof(temp[0])*1000); i = in[0]; yu = 0; temp[0] = in[0]; while(i > 0) { yu = yu*a + in[i]; temp[i --] = yu/b; yu %= b; } out[++k] = yu; i = in[0] ; while(i>0 && temp[i] == 0) { i --; temp[0] --; } memset(in,0,sizeof(in[0])*1000); for(i=0; i<=temp[0]; i++) in[i] = temp[i]; } return k; } int main() { int n, i, a, b, f,len,in[1000], out[1000]; char s[1000]; while(cin>>s>>a>>b) { len = strlen(s); for(i = 0; i<len; i++) { if(s[i]>='A' && s[i]<='Z') in[len - i] = s[i] - 'A' + 10; else if(s[i]>='a' && s[i]<='z') in[len - i ] = s[i] - 'a' + 36; else in[len - i] = s[i] - '0'; } in[0] = len; f = solve(in,out,a,b); if(f>7) { cout<<" ERROR"<<endl; continue; } for(i=0; i<7-f; i++) cout<<' '; for(i = f; i>0; i--) { if(out[i]>=10 && out[i]<= 35) printf("%c",out[i] - 10 + 'A'); else if(out[i]>=36 && out[i] <= 61) printf("%c",out[i] - 36 + 'a'); else printf("%d",out[i]); } cout<<endl; memset(in,0,sizeof(in[0])*1000); memset(out,0,sizeof(out[0]*1000)); memset(s,'\0',sizeof(s[0])*1000); } return 0; }