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;
}



​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值