思想:大数超出了计算机的整形表示范围,故一般用字符串记录,两个大数相加就不能简单的用“+”进行运算,得绕个弯。先把字符串转成int数组(借助与字符'0'的差来实现),每位都放在数组中,然后对数组进行按位加。
#include <iostream>
using namespace std;
const int maxnum=20;
void charTnum(int* intab,char *charab,int len)//字符串转整形,高低位倒置
{
int i=0;
for (i=0;i<len;i++)
{
intab[len-1-i]=charab[i]-'0';
}
}
void initABAns(int* ia,int* ib,int *ians)//数组全置0
{
int i=0;
for (i=0;i<maxnum;i++)
{
ia[i]=0;ib[i]=0;
}
for (i=0;i<maxnum+1;i++)
{
ians[i]=0;
}
}
void BigNumAdd(char* ca,char* cb,int* ians)//示意:ans=a+b
{
int alen=strlen(ca),blen=strlen(cb);
int* ia,*ib,maxlen=0;int i=0;
ia=(int*)malloc(maxnum*sizeof(int));
ib=(int*)malloc(maxnum*sizeof(int));
initABAns(ia,ib,ians);
charTnum(ia,ca,alen);
charTnum(ib,cb,blen);
if (alen>blen)
maxlen=alen;
else
maxlen=blen;
for (i;i<maxlen;i++)//数组相加,结果放ians
{
ians[i]=ia[i]+ib[i]+ians[i];
if(ians[i]>9)
{
ians[i]=ians[i]-10;
ians[i+1]++;
}
}
free(ia);
free(ib);
}
void main()
{
char *ca,*cb;
int* ians,maxlen=0;
ca=(char*)malloc(maxnum*sizeof(char));
cb=(char*)malloc(maxnum*sizeof(char));
ians=(int*)malloc((maxnum+1)*sizeof(int));
printf("请输入加数a :");
scanf("%20s",ca);//这个'20'很鸡肋,最好用maxnum,但不知道怎么写这行代码
printf("请输入被加数b:");
scanf("%20s",cb);
printf("\n");
printf("输出结果为:");
BigNumAdd(ca,cb,ians);
int alen=strlen(ca),blen=strlen(cb);
if (alen>blen)
maxlen=alen;
else
maxlen=blen;
if(ians[maxlen]!=0)printf("%d",ians[maxlen]);//如果最高位有进位,就显示出来
for (int i=0;i<maxlen;i++)
{
printf("%d",ians[maxlen-1-i]);
}
printf("\n");
free(ca);
free(cb);
free(ians);
}