大数加法

两个很大的整数--超过了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);
}

posted @ 2012-10-17 10:10  张朝阳  阅读(5396)  评论(2编辑  收藏  举报