进制转换

实现了进制转换的简单算法(仅限正整数).

#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);
	}
}
posted @ 2021-03-05 10:57  _dwt  阅读(18)  评论(0)    收藏  举报