问题:求A+B的值,A+B是位数在1~200之间的大数。
#include <stdio.h>#include <string.h>
#define N 200void main()
{
char s1[N],s2[N];
int a[N]={0},b[N]={0},l1,l2,c,k,i;puts("请输入两个较大的数字(Note:输完一个按一次回车):");
gets(s1);
gets(s2);
l1=strlen(s1); //用数组装这两个大数
l2=strlen(s2);
if(l1<l2) k=l2;
else k=l1;
c=k;
for(i=0;i<l1;k--,i++) //把两个字符串里面的数字用两个数组表示
a[k]=s1[l1-1-i]-'0';
for(k=c,i=0;i<l2;k--,i++)
b[k]=s2[l2-1-i]-'0';
printf("\n");
for(i=c;i>=0;i--)
{ //两个数组相加,逢十进一
a[i]+=b[i];
if(a[i]>=10)
{
a[i]-=10;
a[i-1]++;
}
}
printf("此两数相加之和为:");
if(a[0]!=0) //从不等于0的一位开始输出
{
for(i=0;i<=c;i++)
printf("%d",a[i]);
}
else
{
for(i=1;i<=c;i++)
printf("%d",a[i]);
}
printf("\n");
return 0;
}
大数相加之所以是编程里的一个难题,关键在于以下几点
1.是否能想到用数组表示两个大数。
2.能否想到如何进操作逢十进一。
3能否想到输出时要考虑第一位不能是0。
以上三点就是我们在进行大数相加时的困扰,此外,我们还要考虑该如何进行大数相减、大数相乘和大数相除,这样才能达到举一反三的效果。