1. 程式人生 > >演算法提高 大數加法

演算法提高 大數加法

問題描述

  輸入兩個正整數a,b,輸出a+b的值。

輸入格式

  兩行,第一行a,第二行b。a和b的長度均小於1000位。

輸出格式

  一行,a+b的值。

樣例輸入

4 2

樣例輸出

6

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

#define BASE 10
#define N 2000

char a[N+1], b[N+1];
char ans[N+1];

int main(void)
{
    int anslen, carry, len, i, j;

    scanf("%s", a);
    scanf("%s", b);

    memset(ans, 0, sizeof(ans));

    anslen = len = strlen(a);
    for(i=len-1, j=0; i>=0; i--)
        ans[j++] = a[i] - '0';
    len = strlen(b);
    if(len > anslen)
        anslen = len;
    carry = 0;
    for(i=len-1, j=0; i>=0; i--,j++) {
        ans[j] += b[i] - '0' + carry;
        carry = ans[j] / BASE;
        ans[j] %= BASE;
    }
    while(carry > 0) {
        ans[j] += carry;
        carry = ans[j] / BASE;
        ans[j++] %= BASE;
    }
    if(j > anslen)
        anslen = j;

    /* 去除前導的多個0 */
    for(i=anslen-1; i>=0; i--)
        if(ans[i])
            break;
    if(i < 0)
        i = 0;

    /* 輸出結果 */
    for(; i>=0; i--)
        printf("%d", ans[i]);
    printf("\n");

    return 0;
}