P进制数转换为Q进制数

点击查看代码
/*
将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;
}

posted @ 2022-09-25 12:41  zhaoo_o  阅读(43)  评论(0编辑  收藏  举报