不就是个进制转换嘛,写的这么复杂
#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;
}