PAT乙级1022. D进制的A+B (20)

本文介绍了一种解决大数相加并转换为特定进制输出的算法实现,采用C++语言,通过递归方式将计算结果转换为指定进制,并解决了长整型数无法直接表示的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题目唯一的坑就是所谓的2的30次方,我天真的以为结果也用long long星就可以了

结果发现A不过,unsigned之,依旧不过

最后发现改成后面的进制后,数字如果还是以10进制保存会浪费很多空间,且会超过2的30(32)次方

果断以余数递归的方法(注意输出语句的顺序),输出它,根据字符对应输出

#include <iostream>
using namespace std;

const char s[10] = {'0','1','2','3','4','5','6','7','8','9'};
void change (unsigned long long num ,int N) {
		if (num) {
		change(num/N,N);   // 注意这两行的顺序
		cout<<s[num%N];
	}
}
int main(void) {
	unsigned long long A {0}, B {0};
//求出A+B的和,并转换成D进制输出
	int D {0};
	cin>>A>>B>>D;
	if (A+B)change(A+B,D);
	else cout<<'0';
	return 0;
}

原题地址: 点击打开链接  点击打开链接  点击打开链接

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

输入格式:

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

输出格式:

输出A+B的D进制数。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值