大数加法


两个很大的整数--超过了INT_MAX,它们怎么做加法呢?把它们当作字符串,逐位进行相加喽。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char* add(const char *arr,const char *brr){
    int lena=strlen(arr);
    int lenb=strlen(brr);
    int maxlen=(lena<lenb)?lenb:lena;
    char* sum=(char*)malloc(maxlen+2);
    memset(sum,'0',maxlen+1);
    sum[maxlen+1]=0;
    int c=0;
    while(lena-->0 && lenb-->0){
        int left=arr[lena]-'0';
        int right=brr[lenb]-'0';
        int s=left+right+c;
        c=s/10;
        s%=10;
        sum[maxlen--]=s+'0';
    }
    if(lena<=0){
        while(lenb-->0){
            int left=0;
            int right=brr[lenb]-'0';
            int s=left+right+c;
            c=s/10;        //C是进位
            s%=10;
            sum[maxlen--]=s+'0';
        }
    }
    else if(lenb<=0){
        while(lena>0){
            int left=arr[lena]-'0';
            int right=0;
            int s=left+right+c;
            c=s/10;
            s%=10;
            sum[maxlen--]=s+'0';
            lena--;
        }
    }
    sum[maxlen]=c+'0';
    return sum;
}

main(){
    char *left="74174616164496";
    char *rit="936259678473525";
    char *sum=add(left,rit);
    size_t pos=strspn(sum,"0");        //路过开头连续的‘0’
    printf(" %25s\n+%25s\n=%25s\n",left,rit,sum+pos);
    free(sum);
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM