题目1080:进制转换
-
题目描述:
-
将M进制的数X转换为N进制的数输出。
-
输入:
-
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
-
输出:
-
输出X的N进制表示的数。
-
样例输入:
-
16 10 F
-
样例输出:
-
15
-
提示:
-
输入时字母部分为大写,输出时为小写,并且有大数据。
代码:
#include<stdio.h>
#include<cstring>
#include<string>
using namespace std;
struct biginteger{
int digit[100];
int size;
void init(){
for(int i=0;i<100;++i)
digit[i]=0;
size=0;
}
void set(int x){
init();
do{
digit[size++]=x%10000;
x/=10000;
}while(x!=0);
}
void output(){
for(int i=size-1;i>=0;--i){
if(i==size-1)
printf("%d",digit[i]);
else
printf("%04d",digit[i]);
}
printf("\n");
}
biginteger operator +(const biginteger &x)const{
biginteger ret;
ret.init();
int c=0; //表示进位
for(int i=0;i<x.size ||i<size;++i){
int tmp=x.digit[i]+digit[i]+c;
c=tmp/10000;
tmp%=10000;
ret.digit[ret.size++]=tmp;
}
if(c!=0)
ret.digit[ret.size++]=c;
return ret;
}
biginteger operator *(int x)const{
biginteger ret;
ret.init();
int sum,c=0;
for(int i=0;i<size;++i){
sum=x*digit[i]+c;
c=sum/10000;
sum%=10000;
ret.digit[ret.size++]=sum;
}
if(c!=0)
ret.digit[ret.size++]=c;
return ret;
}
biginteger operator /(int x)const{ //大数据/x
biginteger ret;
ret.init();
int i,j,t;
int reminder=0;
for(i=size-1;i>=0;--i){
t=(reminder*10000+digit[i])/x;
j=(reminder*10000+digit[i])%x;
ret.digit[i]=t;//保存高位
reminder=j;//余数
}
for(i=size-1;i>=0;--i){ //因为处罚高位可能有0的存在
if(ret.digit[i]!=0){
ret.size=i;
break;
}
}
ret.size++;
return ret;
}
int operator %(int x)const{
int reminder=0,i,t,j;
for(i=size-1;i>=0;--i){
t=(reminder*10000+digit[i])/x;
j=(reminder*10000+digit[i])%x;
reminder=j;
}
return reminder;
}
}a,b,c;
char str[10000];
char buf[10000];
//先转换成十进制数然后再进行进制转换
int main(){
int m,n,i,len;
int sum,ans;
while(scanf("%d %d",&m,&n)!=EOF){ //将m进制的x转化成n进制
scanf("%s",str);
a.init();
a.set(0); //a中存放转换的十进制数
b.set(1); //b中存放权重
len=strlen(str);
for(i=len-1;i>=0;--i){
if(str[i]>='0'&&str[i]<='9')
ans=str[i]-'0';
else
ans=str[i]-'A'+10;
a=a+b*ans;
b=b*m;
}
int size=0;
do{
int t=a%n;
if(t>=10)
buf[size++]=t-10+'a';
else
buf[size++]=t+'0';
a=a/n;
}while(a.digit[0]!=0 || a.size!=1);
for(i=size-1;i>=0;--i)
printf("%c",buf[i]);
printf("\n");
}
return 0;
}