高精度加法
信息学奥赛一本通 1168 大整数加法
思路:
1.倒转成数字数组
2.模拟相加操作
3.去除前导0
4.输出结果数组
#include<iostream>
#include<cstring>
using namespace std;
char a[205];
int numa[205];
char b[205];
int numb[205];
int c[205];
int main(){
cin.getline(a,205);
cin.getline(b,205);
int num_add=0;
int num_next=0;
int lena=strlen(a);
int lenb=strlen(b);
for(int i=lena-1;i>=0;i--) numa[lena-i]=a[i]-'0';
for(int i=lenb-1;i>=0;i--) numb[lenb-i]=b[i]-'0';
//numa[205] numb[205]
int lenc=0;
for(int i=1;i<=lena||i<=lenb;i++){
num_add=numa[i]+numb[i]+num_next;
num_next=num_add/10;
c[i]=num_add%10;
lenc++;
}
//处理最后一位的进位
c[++lenc]=num_next;
//去除前导0
//如果这个数是0,至少保证一个0
while(lenc>1 && c[lenc]==0)lenc--;
//输出结果数组
for(int i=lenc;i>=1;i--){
cout << c[i];
}
return 0;
}