进制转换记录,PAT B1022 D进制的A+B

1.将p进制x转换为十进制数y

循环处理:

其中的x是为p进制的数字,如二进制10001之类的,product我暂时理解为权重,y为最终十进制结果;
while的每一轮取出x的最后一位数字乘上权重,然后加到y上,然后x自除10,product权重增加,这样下一轮x%10又可以取到x当前的最后一位;

int y = 0,product = 1;
while(x != 0)
{
	y = y + (x % 10) * product;
	x /= 10;
	product = product * P;
}

——————————————————————————————————————————————————————

2.将十进制y转换为Q进制数z

原来是除基取余法,如将十进制11转换为二进制
11/2 = 5…1
5/2=2…1
2/2 = 1…0
1/2 =0…1

最后的结构由余数从下往上取,1011

代码:

int z[40],num = 0;
do{
	z[num++] = y % Q;//数组z用于存放余数,最后逆序打印即可
	y /= Q;
}while(y!=0);

这样二进制的结果为z[num-1]到z[0],为什么不用while的原因是因为如果传入的y如果为0,结果自然也要打印出来0,但如果用while循环的条件为y!=0,这样循环根本就进不去,所以首先要先进去一轮,这样z[0]就为0了,符合要求。

——————————————————————————————————————————————————————

实战题目:

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

输入格式:

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

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

代码:

#include <iostream>
using namespace std;

int main()
{
	int a, b,d;
	cin >> a >> b >> d;
	int i = a + b;
	int z[40] = {0}, num = 0;
	//问题是要将十进制转换为二进制,需要用到除基取余法
	//除基取余是要用do while来实行,还需要一个数组来存储结果
	do {
		z[num++] = i % d;
		i = i / d;
	} while (i != 0);
	for (int j = num -1; j >=0; j--)
	{
		cout << z[j];
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值