高精度加法 A+B 问题

简单说两句

作者:后端小知识

CSDN个人主页后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

如果在一定范围内,求解A+B,我们可以用int 或者 long long 来装,对吧,但是呢,如果我的A和B有几千位的话,那就不能这么做了,当然,在其他语言中,比如java有大数运算,那也可以通过大数运算来做,但c/c++中是没有的,我们需要用高精度来做,我们以字符串的形式来处理,后面的运算就用到了我们小学数学的思想,具体的我们来看代码嘛,注释很详细的额
代码如下:大家注意下,我是用的dev c++写的额

//思想是 小学数学加法进位的思想 
#include<bits/stdc++.h> 
using namespace std;
string s1,s2;
int ans[1000010];
int a[1000010],b[1000010];//a  b  数组用来装输入的数字 从低位到高位 。比如 :输入 123  数组装的是321 
int main(){
	cin>>s1>>s2;
	int len1=s1.size(),len2=s2.size();//分别 记录长度 
	for(int j=0,i=len1-1;i>=0;i--){//将输入的内容  从数字的低位开始存入 比如 输入 123   那么a数组前三位装的就是 321  
		a[j++]=s1[i]-'0';
	}							
	for(int j=0,i=len2-1;i>=0;i--){//同上 
		b[j++]=s2[i]-'0';
	}
	int carry=0;//进位   
	int len=0;//用于记录运算结果的长度 
	for(int i=0;i<max(len1,len2);i++){ //这里的 i 的范围要小于  最大长度   这个应该能理解吧 
		int t=a[i]+b[i]+carry;//低位与低位相加,在加上进位    这里好好回忆下小学数学就会明白 
		ans[len++]=t%10;// 这里的t有可能大于9  所以要存入个位额       
		carry=t/10;	//这里就是求进位的那个了  比如 开始 是6+9  那么t等于15  通过小学知识得  要进位 1 对吧  这里carry就表示进位 
	}  
	if(carry!=0){//如果最终的进位不是0的话 那么他就是我们最终结果的最高位 
		ans[len++]=carry;
	}
	for(int i=len-1;i>=0;i--){//好的,终于是要完成了哈  这里就输出结果 是逆序输出额 (这里晓得为啥子噻 ) 
		cout<<ans[i];
	}							
	return 0;
} 

下面是图片版
在这里插入图片描述

【都看到这了,点点赞点点关注呗,爱你们】😚😚

抽象工厂  引导关注

结语

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!😘😘😘

💬

作者:后端小知识

CSDN个人主页后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叮当撩编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值