点击查看代码
/*
将P进制数x转换为Q进制数z
注:x由纯数字组成,例如16进制的12345合法,1AE不合法
输入格式:
P进制 Q进制 P进制数x
输出格式:
Q进制数z
输入样例:
16 8 1234
输出样例:
11064
解题思路:
进制转换步骤
1、将P进制数x转换为十进制数decimal
2、将十进制数decimal转换为Q进制数z
*/
#include<cstdio>
#pragma warning(disable:4996) //允许使用scanf和printf
/*
函数功能:将P进制x转换为Q进制
参数列表:
x:P进制数x
P:P进制
Q:Q进制
*/
void PtoQ(int x, int P, int Q){
int product = 1; //produtc是系数
int decimal = 0; //十进制数decimal
//1、将P进制数x转换为十进制数decimal
while (x != 0) {
decimal += (x % 10) * product; //X从低位到高位开始转换为十进制
x /= 10; //舍弃最低位
product *= P; //系数product=1、P^1、...、P^(n-1)
}
//2、将十进制数decimal转换为Q进制数z
int z[40], num = 0; //z[]存储Q进制数每一位,num是z[]的索引
do {
z[num++] = decimal % Q; //除基取余法,Q进制数从低位到高位存入z[]中,输出时要从高位到低位输出
decimal /= Q;
} while (decimal != 0);
num--; //退出循环时num多加了1,num减1才是z[]的索引
//z[]要从高位到低位输出
while (num >= 0) {
printf("%d", z[num--]);
}
}
int main() {
int P, Q, x; //P进制、Q进制、P进制数x
scanf("%d%d%d", &P, &Q, &x);
PtoQ(x, P, Q); //将P进制x转换为Q进制数并输出
return 0;
}