有没有想过100位数加100数的数字该如何计算出结果吗?一般计算机是无法直接计算那么大的数字,这个时候我们得模拟我们手算加法的进制过程,如何用代码把它实现,这样子就能实现大数相加了,首先我很感谢汤健同学给我分享的这串代码,我写笔记的初衷是为了不断提高自己的能力,希望能与更多小伙伴一起分享有趣的算法。
下面提供代码
实例1:
实例2:
实例3:
输入两个数字,然后输出结果,代码如下:
#include#include #include using namespace std; //主要思路:将两个数字存储入a数组和b数组中,然后从a和b的低位(相同位数)分别相加,判断是否进位 //as,bs通过a[i]-'0'操作实现得到每个 个十百千位上的整数 //l为在 i-- 和j--过程中,是比较长的那一位,用于判断是否遍历到最高位的数字 (这个条件l==0) //k的值为0或者1,开始默认为0,比如说,上一次循环中as+bs+k>9,k就变为1,若当遍历到下一次时, //判断情况(3种) //(1): as+bs+k<9,k就为0,不进位, //(2):as+bs+k>9,k就为1,进位 //(3):as+bs+k>9,同时这个是最大位时,e++下一位直接进1,结束 //仔细观察可以发现这三种情况结束后都有e++;当遍历到最高位时,无论是否进位,结束都有e++ //因此,结尾在输出结果时倒序输出,从e-1开始,因为前面提到了e++; int main() { string a,b; int i,j,s=0,k=0,e=0,l,c[9999]; int as,bs; cin>>a;//输入a,b两个数相加 cin>>b; for(i=a.size()-1,j=b.size()-1;i>=0||j>=0;j--,i--) { l=max(i,j);//选取i和j中的最大长度 if(i>=0) { as=a[i]-'0'; } else { as=0; } if(j>=0) { bs=b[j]-'0'; } else { bs=0; } if(as+bs+k>9&&l==0)// { c[e]=as+bs+k-10; e++; c[e]=1; e++; } else if(as+bs+k>9) { c[e]=as+bs+k-10; k=1; e++; } else if(as+bs+k<=9) { c[e]=as+bs+k; k=0; e++; } } for(i=e-1;i>=0;i--) { cout< 很感谢读者的观看,喜欢我的文章请点赞+关注+收藏



