【问题描述】大整数求和
用某种程序设计语言进行编程时,可发能需要处理非常大或者运算精度要求非常高的整数(称为大整数),这种大整数用该语言的基本数据类型无法直接表示。处理大整数的一般方法是用数组存储大整数,即开辟一个比较大的整型数组,数组元素代表大整数的一位,通过数组元素的运算模拟大整数的运算。
已知大整数,,求C=A+B。可以用两个顺序表A和B分别存储两个大整数,用顺序表C存储求和结果。为了便于执行加法运算,可以将大整数的低位存储到顺序表的低端,顺序表的长度表示大整数的位数。
【输入形式】两个大整数的数位数字。
【输出形式】按照从高位到低位的顺序输出求和结果C。
【样例输入】
987654321
99997531
【样例输出】
1087651852
【说明】如果从键盘输入大整数,一般用字符数组存储,这样无需对大整数进行分段输入,当然输入到字符数组后需要将字符转换为数字。
#include <iostream>
#include <cstdio>
using namespace std;
int ma (int a,int b)
{
if(a>b)
return a;
else
return b;
}
int mi (int a,int b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
char s1[100],s2[100];
int i,j,n1=0,n2=0,m1,m2;
scanf("%s",s1);
scanf("%s",s2);
for(i=0;s1[i];i++)
{
n1++;
}
for(i=0;s2[i];i++)
{
n2++;
}
int a1[n1],a2[n2];
for(i=0;i<n1;i++)
{
a1[i]=s1[i]-'0';
}
for(i=0;i<n2;i++)
{
a2[i]=s2[i]-'0';
}
m2=ma(n1,n2);
m1=mi(n1,n2);
int b[m2],n=0;
for(i=0;i<m2;i++)
{
n1--;
n2--;
if(n1>-1&&n2>-1)
{
b[i]=a1[n1]+a2[n2]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
{
b[i]=b[i];
}
}
else if(n1<=-1&&n2>-1)
{
b[i]=a2[n2]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
b[i]=b[i];
}
else if(n2<=-1&&n1>-1)
{
b[i]=a1[n1]+n;
if(b[i]>=10&&i!=m2-1)
{
n=b[i]/10;
b[i]=b[i]%10;
}
else if(b[i]<10&&i!=m2-1)
n=0;
else if(i==m2-1)
b[i]=b[i];
}
}
for(i=m2-1;i>=0;i--)
{
cout<<b[i];
}
return 0;
}