-
题目描述:
-
将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 <string.h>
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 {
int tmp = x % 10000;
x /= 10000;
digit[size++] = tmp;
}
while(x!=0);
}
void output() {
for(int i=size-1;i>=0;i--) {
if(i!=size-1)
printf("%04d",digit[i]);
else
printf("%d",digit[i]);
}
printf("\n");
}
bigInteger operator * (int x) const {
bigInteger ret;
ret.init();
int carry = 0;
for(int i=0;i<size;i++) {
int tmp = (digit[i] * x) + carry;
carry = tmp / 10000;
tmp %= 10000;
ret.digit[ret.size++] = tmp;
}
if(carry != 0)
ret.digit[ret.size++] = carry;
return ret;
}
bigInteger operator + (const bigInteger &A) const {
bigInteger ret;
ret.init();
int carry = 0;
for(int i=0;i<size || i<A.size;i++) {
int tmp = digit[i] + A.digit[i] + carry;
carry = tmp / 10000;
tmp %= 10000;
ret.digit[ret.size++] = tmp;
}
if(carry != 0)
ret.digit[ret.size++] = carry;
return ret;
}
bigInteger operator / (int x) const {
bigInteger ret;
ret.init();
int remain=0;
for(int i=size-1;i>=0;i--) {
int tmp = (digit[i] + remain * 10000) / x;
int r = (digit[i] + remain * 10000) % x;
remain = r;
ret.digit[i] = tmp;
}
for(int i=0;i<100;i++)
if(digit[i]!=0) ret.size = i;
ret.size++;
return ret;
}
int operator % (int x) const {
int remain = 0;
for(int i=size-1;i>=0;i--) {
int r = (digit[i] + remain*10000) % x;
remain = r;
}
return remain;
}
}a,b,c;
char str[1000];
char ans[1000];
int main() {
int n,m;
while(scanf("%d %d",&m,&n)!=EOF) {
scanf("%s",str);
a.set(0);
b.set(1);
int len = strlen(str);
for(int i=len-1;i>=0;i--) {
int tmp;
if(str[i]>='0' && str[i]<='9')
tmp = str[i] - '0';
else
tmp = str[i] - 'A' + 10;
a = a + b * tmp;
b = b * m;
}
int size = 0;
do {
int r = a % n;
if(r>=0 && r<=9) ans[size++] = r + '0';
else ans[size++] = r - 10 + 'a';
a = a / n;
}while(a.digit[0]!=0 || a.size!=1);
for(int i=size-1;i>=0;i--)
printf("%c",ans[i]);
printf("\n");
}
return 0;
}