【数据结构与算法问题】一文解决大整数问题&&最简单的方法处理——(上)(12行核心代码妈妈再也不担心大整数问题了)

这篇博客探讨了如何处理大整数相加的问题,通过字符串模拟手算过程来避免溢出。文章介绍了算法思路,包括从个位到最高位逐位相加,并处理进位的过程。同时,给出了相应的C++代码实现,实现了两个大整数相加的功能。

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

引言:100个9加100个9等于多少呢?
聪明的读者你一定会知道简单的相加不能解决并且一定会上溢。那么你可能就会想到用字符串模拟手算过程是否可以呢?
答:恭喜你,你已经解决了问题的一半了;

先举个简单的例子尝试推导算法过程;
999
+ 99
———
将运算步骤拆解成以下过程:

在这里插入图片描述

可以总结出,在位数对齐的情况下(不对齐会分类讨论)(结合上图来理解过程),
个位与个位相加的当前结果求出取整(进位)和余数,结果为上一次的进位与当前余数相加后取余;
十位与十位相加的当前结果求出取整(进位)和余数,结果为个位运算的进位与当前余数相加后取余;
百位与百位相加的当前结果求出取整(进位)和余数,结果为十位运算的进位与当前余数相加后取余;
。。。。
最后一位运算进行判断是否有进位,有:结果前添加,没:最后的结果就是当前结果;
(建议自己举个例子模拟上述过程)

简单的来说: string res ;
for(从各位到最后一位逐次处理)
res+=(上一次的进位+当前的余数)%10;
最后一位运算进行判断是否有进位,有:结果前添加,没:最后的结果就是当前结果;

代码:

    string a = "10000", b = "999",c;
	int jinwei = 0, yushu = 0;
	//位数对齐,不足前面补0
	if (a.size() > b.size())
	{
		int t = a.size() - b.size();
		for (int i = 0;i < t;i++)
			b.insert(0,"0");
	}

	if (a.size() < b.size())
	{
		int t = b.size() - a.size();
		for (int i = 0;i < t;i++)
			a.insert(0,"0");
	}
	//个位的索引,
	int index_max = a.size()-1;
	for (int i=index_max;i>=0;i--)
	{
		yushu = ((a[i] - '0') + (b[i] - '0') + jinwei) % 10;
		c.insert(0, to_string(yushu));
		//从前面插入余数
		jinwei = ((a[i] - '0') + (b[i] - '0') + jinwei) / 10;
	}
	//处理最后运算的进位
	jinwei == 1 ? c += "1" : c = c;
	cout << c<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值