/* 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。 输入 输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。 输出 可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。 样例输入4 10 123 样例输出27 */ #include <bits/stdc++.h> #include <cstring> using namespace std; int toInt(char x) { if(x >= '0' && x <= '9') return x - '0'; else if( x >= 'a' && x <= 'z') return x - 'a' + 10; else return x - 'A' + 10; } char toChar(int x) { if( x>=0 && x<=9) return '0' + x; else return 'A' + x - 10; } int main() { int a, b; // a为原进制 b要转换的进制 char s[50]; while((scanf("%d%d%s", &a,&b,s)) != EOF) // scanf("%d%d%s", &a,&b,s); { int product = 1; // 进制的幂 int y = 0; //存十进制,中间转换 for(int i = strlen(s) - 1; i>= 0; i--) { y += toInt(s[i]) * product; product = product * a; } char ans[100]; int num = 0; do{ ans[num++] = toChar(y % b); y = y / b; }while(y!=0); for(int i = strlen(ans) - 1; i >= 0; i--) { printf("%c", ans[i]); } printf("\n"); } return 0; }
来源:https://www.cnblogs.com/myblog1993/p/11457596.html