题目:将两个超大数相加
思路:利用数组存取每一位数字,采用分位相加,处理进位问题,倒叙输出
#include<stdio.h>
#include<string.h>
int main()
{
char a[1001]={0}; //输入第一个数据
char b[1001]={0}; //输入第二个数据
int aa[1001]={0}; //存第一个数据的倒叙
int bb[1001]={0}; 存第二个数据的倒叙
int max=0;
int t=0;
int i,j,k;
int str1,str2;
gets(a); //输入数据
gets(b);
str1=strlen(a); //存一下各自的位数是多少
str2=strlen(b);
for(i=str1-1,j=0;i >= 0;i--)
aa[j++]=a[i]-'0'; //倒一下,方便从个位相加
// aa[j]='\0';
j=0;
for(i=str2-1,j=0;i >= 0;i--)
bb[j++]=b[i]-'0';
// bb[j]='\0';
j=0;
if(str1 >= str2) //判断一下谁的位数大
max=str1;
else
max=str2;
for(i=0;i<max;i++)
{
t=aa[i]+bb[i]+t; //每位加法,加上两个数和来自上一位的进位(t)
aa[i]=t%10; //将本位的数字保存在aa中
t=t/10; //t用来保存进位
}
aa[i]=t; //循环结束后,可能产生进位超过最大位数,故这里加上进位(有则进位,无则加0,无影响)
if(aa[i] != 0)
printf("%d",aa[i]);
i--;
for(;i >= 0;i--)
printf("%d",aa[i]);
return 0;
}