算法——大数加法

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

基本思路:

使用字符串类型进行输入输出,处理时将其每一位转换成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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值