大整数加法C++
程序员文章站
2024-03-23 15:53:58
...
10:大整数加法
总时间限制:
1000ms
内存限制:
65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222 33333333333333333333
样例输出
55555555555555555555
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char a[201]={'\0'};
char b[201]={'\0'};
int c[201]={0};
int d[201]={0};
//读入两个字符串
cin>>a;
cin>>b;
//将两个字符串分别转换成逆序的整型数组
for(int i=0,j=strlen(a)-1;j>=0;i++,j--){
c[i]=a[j]-'0';
}
for(int i=0,j=strlen(b)-1;j>=0;i++,j--){
d[i]=b[j]-'0';
}
//进行加法
for(int i=0;i<=200;i++){
c[i]+=d[i];
if(c[i]>=10){
c[i+1]++;
c[i]-=10;
}
}
//再逆序输出并去掉前导0
int flag=0;
for(int i=200;i>=0;i--){
if(c[i]==0&&flag==0){
continue;
}
cout<<c[i];
flag=1;
}
//如果结果就是0?
if(flag==0)cout<<0;
return 0;
}