两个加数的位数不超过100000位
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX 100009
using namespace std;
void Rever(int n,char str[]);
int Add(int n,char str1[],char str2[]);
int main(int argc, char *argv[])
{
char Str1[MAX];
char Str2[MAX];
while(cin>>Str1>>Str2)
{
int M,N;
M=strlen(Str1);
N=strlen(Str2);
Rever(M,Str1);
Rever(N,Str2);
int i;
if(M>N)
{
for(i=N;i<M;i++)
{
Str2[i]='0';
}
N=M;
}
else
{
for(i=M;i<N;i++)
{
Str1[i]='0';
}
}
Add(N,Str1,Str2);
}
return 0;
}
void Rever(int n,char str[])
{
int i;
char a;
for(i=0;i<(n/2);i++)
{
a=str[n-1-i];
str[n-1-i]=str[i];
str[i]=a;
}
}
int Add(int n,char str1[],char str2[])
{
int i,j;
int sum;
int cf=0;
char Sum[MAX];
for(i=0;i<n;i++)
{
sum=str1[i]+str2[i]-96+cf;
cf=sum/10;
Sum[i]=(sum%10)+48;
}
if(cf>0)
{
Sum[n]=cf+48;
Rever(n+1,Sum);
for(j=0;j<n+1;j++)
{
printf("%c",Sum[j]);
}
}
else
{
Rever(n,Sum);
for(j=0;j<n;j++)
{
printf("%c",Sum[j]);
}
}
printf("\n");
return 0;
}