进制转换问题,很重要,尤其是搜索中用于状态的表示。这题把目标进制弄成十进制再用栈来转换成目标进制就好了。
以下是代码:
- #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
char dic[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char digit[10];
int chang;
int stack[100],top;
int n,m; - void change1()
{
int len=strlen(digit);
chang=0;
for(int i=0;i<len;i++)
if(digit[i]!=' ' && digit[i]!='0')
{
int temp;
if(digit[i]>='1' && digit[i]<='9') temp=digit[i]-'0';
else if(digit[i]=='A') temp=10;
else if(digit[i]=='B') temp=11;
else if(digit[i]=='C') temp=12;
else if(digit[i]=='D') temp=13;
else if(digit[i]=='E') temp=14;
else if(digit[i]=='F') temp=15;
chang+=pow(n,len-i-1)*temp;
}
} - void change2()
{
top=0;
int i;
while(chang)
{
int temp=chang%m;
stack[top++]=temp;
chang/=m;
}
} - int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%s",digit)==1)
{
scanf("%d%d",&n,&m);
change1();
change2();
if(top>7)
printf(" ERROR");
else
{
int i;
for(i=0;i<7-top;i++)
printf(" ");
while(top)
{
printf("%c",dic[stack[top-1]]);
top--;
}
}
printf("/n");
}
return 0;
}