在常规计算中我们遇到的数都可以在int范围或者是long int范围内进行计算,但是我们如果遇到比较大的数字,比如说50为数字相加,我们应该怎么办?
这时候,我们就想想小时候我们在做加法计算的时候,老师教我们利用列竖式的方法进行计算,而这个算法就是回归以前的计算过程。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
char a[1000],b[1000];
int n[1000]={0},u[1000]={0};
int m[1002]={0};
void bigNumberSum(char a[],char b[]){
cin>>a>>b;
int index=0;
//当a和b都为0的时候,输出为0
if(a[0]=='0'&&b[0]=='0'){
cout<<"0"<<endl;
}
else{
//先计算a和b的长度
int strlena=strlen(a);
int strlenb=strlen(b);
//然后将char改为int逆序存入n和u中
for(int i=0,j=strlena-1;i<strlena;i++,j--){
n[i]=a[j]-'0';
}
for(int i=0,j=strlenb-1;i<strlenb;i++,j--){
u[i]=b[j]-'0';
}
//然后将两个逆序数组进行相加放在m中
int k=strlena>strlenb?strlena:strlenb;
for(int i=0;i<k;i++){
m[i]=n[i]+u[i];
if(m[i]>10){
m[i+1]++;
m[i]=m[i]%10;
}
}
//然后找出不为零的边界
for(int j=1001;;j--){
if(m[j]!=0){
index=j;
break;
}
}
}
for(int j=index;j>=0;j--){
cout<<m[j];
}
cout<<endl;
}
int main(int argc, char const *argv[]) {
bigNumberSum(a,b);
return 0;
}