十进制转换为某进制——除基取余法
-
题目描述:
-
将M进制的数X转换为N进制的数输出。
-
输入:
-
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
-
输出:
-
输出X的N进制表示的数。
-
样例输入:
-
16 10 F
-
样例输出:
-
15
-
提示:
-
输入时字母部分为大写,输出时为小写,并且有大数据。
为大数重载运算符。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxDigits = 100;
/*
int ans[50];
int psize = 0;
//进制转换
void radix(int a, int b) {
//十进制转为b进制
do {
ans[psize++] = a % b;
a /= b;
} while (a);
}
//b进制的数字a 转换为十进制
//假设均为小写字母
void radixTo10(char a[], int b) {
int L = strlen(a);
int c = 1;
int ans = 0;
for (int i = L - 1; i >= 0; --i) {
int t;
if (a[i] >= 'a' && a[i] <= 'z') t = a[i] - 'a' + 10;
else t = a[i] - '0';
t *= c;
ans += t;
c *= b;
}
}
*/
//A进制转换为B进制
//先转为10进制(涉及Big + Big、int * Big),再转为B进制(涉及Big%int、Big / int)
//大整数的进制转换
struct BigInteger {
int size;
int digit[1000];
void init() {
size = 0;
for (int i = 0; i < 1000; ++i)
digit[i] = 0;
}
void set(int x) {
init();
do {
digit[size++] = x % 10000;
x /= 10000;
} while (x);
}
BigInteger operator + (const BigInteger & b)const {
BigInteger res;
res.init();
int carry = 0;
for (int i = 0; i < size || i < b.size; ++i) {
int tmp = digit[i] + b.digit[i] + carry;
res.digit[res.size++] = tmp % 10000;
carry = tmp / 10000;
}
if (carry != 0)res.digit[res.size++] = carry;
return res;
}
BigInteger operator * (int x)const {
BigInteger res;
res.init();
int carry = 0;
for (int i = 0; i < size; ++i) {
int tmp = digit[i] * x + carry;
res.digit[res.size++] = tmp % 10000;
carry = tmp / 10000;
}