1.算法思路
- 用字符串存储超大数
- 将较小数前面补0使其与较大数等长
- 逐位相加
2.C语言源码如下
#include <stdio.h>
#include <string.h>
#define debug
const int size=1024;
int main(int argc,const char *argv[])
{
void bigNumAdd(char *a,char *b);
char a[size];
char b[size];
printf("\n\t/* 超大数求和程序 */\n");
printf("\n请输入第一个数,按Enter键结束输入\n");
scanf("%s",a);
printf("\n请输入第二个数,按Enter键结束输入\n");
scanf("%s",b);
printf("\n输入结束,结果为:\n");
bigNumAdd(a,b);
return 0;
}
void bigNumAdd(char *a,char *b)
{
void printLine(int n);
char sum[size]="";
char tmp=0;
int alen=0,blen=0,slen=0;
int ia=0,ib=0,is=0;
int cflag=0;
alen=strlen(a);
blen=strlen(b);
if(alen<blen)
{
memmove(a+blen-alen,a,alen+1);
memset(a,'0',blen-alen);
alen=blen;
}
else if(alen>blen)
{
memmove(b+alen-blen,b,blen+1);
memset(b,'0',alen-blen);
blen=alen;
}
#ifdef debug
printf("\n\t %s\n\t+ %s\n",a,b);
printf("\t ");
printLine(alen);
#endif
for(ia=alen-1,ib=blen-1,is=0;ia>=0&&ib>=0;ia--,ib--,is++)
{
if(sum[is]==0)
{
if(a[ia]+b[ib]<='9'+'0')
{
sum[is]=a[ia]+b[ib]-'0';
cflag=0;
}
else
{
sum[is]=a[ia]+b[ib]-'0'-10;
sum[is+1]='1';
cflag=1;
}
}
else
{
if(sum[is]-'0'+a[ia]+b[ib]<='9'+'0')
{
sum[is]=sum[is]-'0'+a[ia]+b[ib]-'0';
cflag=0;
}
else
{
sum[is]=sum[is]-'0'+a[ia]+b[ib]-'0'-10;
sum[is+1]='1';
cflag=1;
}
}
}
slen=strlen(sum);
for(is=0;is<slen/2;is++)
{
tmp=sum[is];
sum[is]=sum[slen-1-is];
sum[slen-1-is]=tmp;
}
printf("\t= %s\n",sum);
#ifdef debug
printf("\n\tcflag=%d\n\n",cflag);
#endif
}
void printLine(int n)
{
int i=0;
for(i=0;i<n;i++)
printf("-");
printf("\n");
}