PAT 乙级 1022 D进制的A+B (20分) (题目 + 代码 + 详细注释)

输入两个非负 10 进制整数 A 和 B (≤2​30​​−1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:

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

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

//大致讲一下进制转换:k进制就是满k进一,我们通常看到的数是十进制,所以是满10进1。那么如何把十进制转换成k进制呢,下面以2进制为例,其他进制的话思路是一样的,模仿即可。

十进制整数转换为二进制整数

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

如果要将十进制转换成k进制,只需把除数2换成k即可

下面是我AC的代码:

#include<stdio.h>
int v[100];   //数组储存每次除法运算的余数

int main() { 
	int x, y, k, m, i;  
	scanf("%d %d %d", &x, &y, &k);   //转为k进制
	m = x + y;            //先算出x + y 的十进制结果, 操作此数
	i = 0;           //i为最新一次获得的余数下标+1

	do{                 //注意:要用do-while,否则的话m == 0时会出错(先特判也可)
	    v[i++] = m % k;             //得到最后一位
	    m /= k;                //擦除最后一位
        }while (m);

	while (i--)          //逆序输出数组的每一位
		printf("%d", v[i]);
	return 0;
}



​

猜你喜欢

转载自blog.csdn.net/qq_45472866/article/details/104396951