**问题描述**
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
**输入格式**
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
**输出格式**
输出一行,表示a + b的值。
**样例输入**
20100122201001221234567890
2010012220100122
**样例输出**
20100122203011233454668012
**解题思路**
很明显,a、b数的长度超过了int。只能用数组的解题方法。
定义两个数组a[]和b[]。其中a[0]视为个位,a[1]视为十位,以此类推。
计算c=a+b时。让相应的位相加。个位与个位相加a[0]+b[0],如果产生了进位,那么十位与十位相加时要加上进位。
**附上代码**
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=100;
int a[maxn]={0};
int b[maxn]={0};
int c[maxn]={0};
int main()
{
void InputNum(char*,int,int[]);//数组从0~n分别记录个位、十位…
void Add(int&); //相应的位进行相加
int max_len=0; //记录最大的数组长度
string s1;
string s2;
cin>>s1>>s2;
s1.length()>=s2.length()?max_len=s1.length()-1:max_len=s2.length()-1;
InputNum(&s1[0],s1.length()-1,a);
InputNum(&s2[0],s2.length()-1,b);
Add(max_len);
//逆序输出
for(int i=max_len;i>=0;i--)
cout<<c[i];
cout<<endl;
return 0;
}
void InputNum(char* p,int n,int temp[])
{
for(int i=n;i>=0;i--)
temp[n-i]=*(p+i)-'0';
}
void Add(int& max_len) //这里用"引用",是为了最高位
{ //出现进位而需要将数组长度+1的情况
int r=0;//记录进位
for(int i=0;i<=max_len;i++)
{
int sum=a[i]+b[i]+r;
r=sum/10;
c[i]=sum%10;
}
if(r!=0)
{
max_len++;
c[max_len]=r;
}
}