有没有想过100位数加100数的数字该如何计算出结果吗?一般计算机是无法直接计算那么大的数字,这个时候我们得模拟我们手算加法的进制过程,如何用代码把它实现,这样子就能实现大数相加了,首先我很感谢汤健同学给我分享的这串代码,我写笔记的初衷是为了不断提高自己的能力,希望能与更多小伙伴一起分享有趣的算法。
下面提供代码
实例1:
![](https://img-blog.csdnimg.cn/1c0e27a454df42a28c74a142a9e4e793.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWZ5o6I5YWI55Sf,size_6,color_FFFFFF,t_70,g_se,x_16)
实例2:
![](https://img-blog.csdnimg.cn/1979f8723bc34257a9a00c189be3ac35.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWZ5o6I5YWI55Sf,size_16,color_FFFFFF,t_70,g_se,x_16)
实例3:
![](https://img-blog.csdnimg.cn/92aec7be5dbc4c5591eb6682366b2348.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWZ5o6I5YWI55Sf,size_16,color_FFFFFF,t_70,g_se,x_16)
输入两个数字,然后输出结果,代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
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<<c[i];
}
cout<<endl;
return 0;
}
很感谢读者的观看,喜欢我的文章请点赞+关注+收藏