时间限制:1000ms 内存限制:65536kb
通过率:412/451 (91.35%) 正确率:412/1131 (36.43%)
题目描述给定一个 nn 进制数 aa,请你将它转换为 mm 进制并输出。
特别的,令 A,B,C,…,ZA,B,C,…,Z 表示高进制下的 10∼3510∼35。
例如,对于 1616 进制下的数 5A5A,它表示十进制下的 9090。
输入一行,先输入一个字符串 aa,表示需要进制转换的 nn 进制数。再输入两个空格隔开的整数 n,mn,m,含义见上。
输出输出一行一个字符串,表示 nn 进制下的数 aa 在 mm 进制下是多少。
输入样例18 10 2输出样例1
1000输入样例2
2HB4QH81T5O 35 13输出样例2
199510435A68577HINT
假设数 aa 对应十进制下的数 bb,保证 b≤1018b≤1018。
如果你不知道如何输入,那么可以参照如下输入方式:
char ch[100];
int n,m;
scanf("%s%d%d",ch,&n,&m);
int len=strlen(ch);
其中,输入的字符串存在 ch 数组的第 0 位到第 len-1 位。
如果要使用上述代码,请添加头文件string.h,即在程序开头添加#include
Author : yzh
#include#include #include //——————————将N进制转化为M进制———————————— char ch[100]; char putout[100]; int main() { //——————————————准备———————————— int n, m, len, i, j = 1; unsigned long long n_10 = 0, N, M; scanf("%s%d%d", ch, &n, &m); len = strlen(ch); N = n; M = m; //——————————将N进制转化成10进制———————————— for (i = len-1; i >= 0; i--) { if (ch[i] > 48 && ch[i] <= 57) { n_10 += (ch[i] - '0') * N / n; N *= n; } else if (ch[i] == 48) N *= n; else { n_10 += (ch[i] - 'A' + 10) * N / n; N *= n; } } //——————————将10进制转化为M进制———————————— i = 1; while (n_10) { if (n_10 % M >= 10) { putout[i] = 'A' + (n_10 % M) - 10; } else { putout[i] = '0' + (n_10 % M); } n_10 /= M; i++; } i -= 1; while (i) { printf("%c", putout[i]); i--; } return 0; }



