思想:大数超出了计算机的整形表示范围,故一般用字符串记录,两个大数相加就不能简单的用“+”进行运算,得绕个弯。先把字符串转成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);}