算法——大数加法

来源:互联网 发布:拆分盘源码 编辑:程序博客网 时间:2024/06/05 15:26

将两个无法使用基本数据类型存储的大数进行加法运算。

基本思路:

使用字符串类型进行输入输出,处理时将其每一位转换成int类型,进行加减和进位。

C语言实现:

这个是自己编完,根据网上的其他代码进行了一些修改删减得出的代码。个人认为相比网上的一些代码,更具有可读性和实用性,还是比较值得记录的。
#include <stdio.h>#include <string.h>#define MAXSIZE 101void 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;} 
原创粉丝点击