将两个无法使用基本数据类型存储的大数进行加法运算。
基本思路:
使用字符串类型进行输入输出,处理时将其每一位转换成int类型,进行加减和进位。
C语言实现:
这个是自己编完,根据网上的其他代码进行了一些修改删减得出的代码。个人认为相比网上的一些代码,更具有可读性和实用性,还是比较值得记录的。
#include <stdio.h>
#include <string.h>
#define MAXSIZE 101
void add(char a[],char b[],char s[]){
int i;
//转化为整数
int sizea=strlen(a);
int inta[MAXSIZE-1]={0};
for(i=0;i<sizea;i++)
inta[i]=(int)(a[i]-'0');
int sizeb=strlen(b);
int intb[MAXSIZE-1]={0};
for(i=0;i<sizeb;i++)
intb[i]=(int)(b[i]-'0');
//逆序加数
int e=0;
for(i=0;i<sizea/2;i++){
e=inta[i];
inta[i]=inta[sizea-i-1];
inta[sizea-i-1]=e;
}
for(i=0;i<sizeb/2;i++){
e=intb[i];
intb[i]=intb[sizeb-i-1];
intb[sizeb-i-1]=e;
}
//相加
int sum[MAXSIZE]={0};
for(i=0;inta[i]!=0||intb[i]!=0;i++){
sum[i+1]=(sum[i]+inta[i]+intb[i])/10;
sum[i]=(sum[i]+inta[i]+intb[i])%10;
}
//转化结果为char
int j;
for(j=0;j<i+1;j++)
s[j]=sum[j]+'0';
//排除最高位为0的可能
if(s[i]=='0')
s[i]='\0';
else
s[i+1]='\0';
//逆序结果
char m;
for(i=0;i<strlen(s)/2;i++){
m=s[i];
s[i]=s[strlen(s)-i-1];
s[strlen(s)-i-1]=m;
}
}//大数相加
int main(){
char a[MAXSIZE];
char b[MAXSIZE];
char s[MAXSIZE+1];
printf("请输入大数a:");
gets(a);
printf("请输入大数b:");
gets(b);
add(a,b,s);
printf("结果为:\n");
printf("%s",s);
return 0;
}