B1022. D进制的A+B (20)

题目描述:

输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入格式:

输入在一行中依次给出3个整数A、B和D。

输出格式:

输出A+B的D进制数。

输入样例:
123 456 8
输出样例:
1103    

思路:

有题值A+B最大为2^31-2,int型可以满足;之后用除基除余法即可对十进制进行转换;

(1)十进制x转换为Q进制y:

采用“除基除余法”,基即为十进制数x,每次讲x除Q,得到的余数低位存储,而商则作为新的x作以上操作,直至商为0;然后从高位输出即可得到y;

代码如下:

#include <cstdio>

int main()
{	
	int a, b, D;
	int d[31];						//边界情况也不会超过31位; 
	scanf ("%d%d%d", &a, &b, &D);
	int sum = a +b, count = 0;
	
	do {							//sum为0,也要先进行一次赋值; 
		d[count++] = sum % D;
		sum = sum / D;
	} while (sum != 0);
	
	for (int i = count - 1; i >= 0; i--) {		//从高位输出; 
		printf ("%d", d[i]);
	}
	
 	return 0;
}

(2)Q进制x转换为十进制y:

若一个十进制数为,它可以转化为

若一个Q进制数为,他可以转化为

对Q进制数运用十进制的加法和乘法即可实现进制间转化;

运用以下代码可以实现:

int y = 0, product = 1;        
while (x != 0) {
	y = y + (x % 10) * product;       //用于获取x的个位的数;
	x = x / 10;                    //去掉x的个位;
	product = product * p;        //用于得到p^n;
} 

猜你喜欢

转载自blog.csdn.net/privilage/article/details/79948051