⭐简单说两句⭐
作者:后端小知识
个人主页:后端小知识
🔎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;
}
下面是图片版
【都看到这了,点点赞点点关注呗,爱你们】😚😚
结语
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!😘😘😘