题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222 33333333333333333333
【输出样例】
55555555555555555555

#include <bits/stdc++.h>
using namespace std;
/*解题思路:int类型数据最多10位,double类型数据最多64位,因此,不能直接利用int或double类型数据相加求解*/
/*应考虑用数组(为方便读入数据,采用字符数组),采用列竖式的思路,对位相加,在考虑进位,最终求解。*/
string A,B;
int a[210],b[210],c[210];
int main(){
//A,B 存储字符串
memset(a,0,sizeof(c));
memset(b,0,sizeof(c));
memset(c,0,sizeof(c));
cin>>A>>B;
//字符串长度
int lena=A.length();
int lenb=B.length();
//倒过来存储
for(int i=1;i<=lena;i++){
a[i]=A[lena-i]-'0';
}
for(int i=1;i<=lenb;i++){
b[i]=B[lenb-i]-'0';
}
int len=max(lena,lenb);
int i;
for(i=1;i<=len;i++){
int tmp=a[i]+b[i]+c[i]; //a[i]+b[i]加上存储的上次加法产生的进位
c[i+1]=tmp/10; //除以10取整作为进位
c[i]=tmp%10; //除以10取余作为这位的结果
}
//看最后一位是否有进位,若有进位,则总长度+1
if(c[i]!=0){
len++;
}
//去除前导0的情况
while(c[len]==0&&len>0){
len--;
}
//倒着输出结果
for(int i=len;i>=1;i--){
cout<<c[i];
}
}
有话要说...