大數加法


兩個很大的整數--超過了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