【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
AC:
#include<bits/stdc++.h>
using namespace std;
int main(){
string str1,str2;
int a[222]={0},b[222]={0},c[222]={0},lena,lenb,lenc;
cin>>str1;
cin>>str2;
lena=str1.length();
lenb=str2.length();
lenc=lena>lenb?lena:lenb;
for(int i=0;i<lena;++i)
a[lena-i]=str1[i]-'0';
for(int i=0;i<lenb;++i)
b[lenb-i]=str2[i]-'0';
int temp=1;
int x=0;
while(temp<=lenc){
c[temp]=(a[temp]+b[temp]+x)%10;
x=(a[temp]+b[temp]+x)/10;
temp++;
}
int index=temp;
if(x)c[temp]=x;
else{
for(int i=index;i>0;--i){
if(c[i]){
index=i;
break;
}
}
}
for(int i=index;i>0;--i)
cout<<c[i];
return 0;
}
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string str1,str2;
int a[222]={0},b[222]={0},c[222]={0};
cin>>str1;
cin>>str2;
int len1=str1.length();
int len2=str2.length();
for(int i=0;i<len1;++i)
a[len1-i]=str1[i]-'0';
for(int i=0;i<len2;++i)
b[len2-i]=str2[i]-'0';
int lenc=len1>len2?len1:len2;
int x=0;
int temp=1;
while(temp<=lenc){
c[temp]=(a[temp]+b[temp]+x)%10;
x=(a[temp]+b[temp]+x)/10;
temp++;
}
int index;
if(x)c[lenc]=x;
else{
for(index=lenc;index>0;index--)
if(c[index])break;
lenc=index;
}
for(int i=lenc;i>0;i--)
cout<<c[i];
cout<<endl;
return 0;
}