进制转换
实现了进制转换的简单算法(仅限正整数).
#include<cstdio>
inline int power(int x, int p) {
int b = 1;
while (p) {
if (p & 1)
b *= x;
p >>= 1;
x *= x;
}
return b;
}
inline int transNum10toN(int x, int N, int* a) {
int t[32];
int i = 0;
while (x) {
t[i] = x % N;
x /= N;
++i;
}
for (int j = 0; j < i; ++j)
a[j] = t[i - 1 - j];
return i;
}
inline int transNumNto10(int* a, int N, int size) {
int x = 0;
for (int i = 0; i < size; ++i)
x += a[i] * power(N, i);
return x;
}
inline int transNumMtoN(int N, int* n, int M, int* m, int msize) {
int x = transNumNto10(m, M, msize);
int size = transNum10toN(x, N, n);
return size;
}
inline void printNum(int* a, int size) {
for (int i = 0; i < size; ++i) {
if (a[i] > 10)
printf("%c", a[i] + 54);
else printf("%d", a[i]);
}
puts("");
}
inline int read(int* a) {
getchar();
int tmp[32];
int i = 0;
int t = getchar();
while (t != '\n') {
if ('0' <= t && t <= '9')
tmp[i] = t - '0';
else if ('A' <= t && t <= 'Z')
tmp[i] = t - 54;
++i;
t = getchar();
}
for (int j = 0; j < i; ++j)
a[j] = tmp[i - 1 - j];
return i;
}
int main() {
int T;
int N, M;
int n[32], m[32];
scanf("%d", &T);
while (T--) {
scanf("%d%d", &M, &N);
int size = read(m);
int s = transNumMtoN(N, n, M, m, size);
printNum(n, s);
}
}