既然楼主要求用C语言,那就用经典的C指针吧
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* BigIntAdd(char* x,char* y,char* z)
{
int lenx=strlen(x);
int leny=strlen(y);
char *pmax=x,*pmin=y,*pz=z,*p1,*p2,t;
int i,lenmax=lenx,lenmin=leny;
if (lenx < leny)
{
pmax=y;
pmin=x;
lenmax=leny;
lenmin=lenx;
}
p1=pmax+lenmax-1;
p2=pmin+lenmin-1;
while(p2>=pmin)
{
*pz = *p1 + *p2 -'0';
if (pz>z && *(pz-1)>='0'+10)
{
*(pz-1)-=10;
*pz+=1;
}
p1--;p2--;pz++;
}
for(i=0;i<lenmax-lenmin;i++)
{
*pz=*p1;
if (pz>z && *(pz-1)>='0'+10)
{
*(pz-1)-=10;
*pz+=1;
}
pz++;p1--;
}
pz--;
if (*pz>='0'+10)
{
*(pz++)-=10;
*pz='1';
}
for(p1=z;p1<pz;p1++,pz--)
{
t=*p1;*p1=*pz;*pz=t;
}
return z;
}
void main()
{
system("color 1e");
char x[1024*10]={0},y[1024]={0},z[1024]={0};
printf("Enter Large Integers 1:\n");
scanf("%s",x);
printf("Enter Large Integers 2:\n");
scanf("%s",y);
BigIntAdd(x,y,z);
printf("\n\nBigInt Add:\n%s\n\t+\n%s\n\t=\n%s\n",x,y,z);
system("pause");
}
主要想法是,判断两个数字的长短,找出最短的数字,从个位数开始与另一个数的相应位进行相加(注意判断向上进位),将结果逐个保存在结果字符串中。最后将长的那个数字 剩下的部分直接 放在结果字符串中,然后将结果字符串反转,得到结果