如果在一定范围内,求解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; }
下面是图片版