大數加法~HDU 1002 A + B Problem II

題目連接:php

http://acm.hdu.edu.cn/showproblem.php?pid=1002ios

題意:數組

數學題,A+B;ide

思路,這個數很是大,普通加法必定會超時,因此用大數加法。大數加法的基本思路是模擬咱們作加法的時候的進位思想,從最低位開始模擬,spa

在個人代碼裏code

v -- 進位, tmp -- 當前位2個數的和,k -- 答案數組的下標。blog

其中, tmp/10 能夠獲得要進的位數, 同理,tmp%10能夠獲得個位,就是答案數組對應的位get

下面是AC代碼:數學

#include <iostream>
#include <cstdio>
#include <string.h>

using namespace std;
const int MX = 1000+10;
char a[MX], b[MX];
int c[MX];

int main()
{
    int cas = 0;
    int T;
    scanf("%d", &T);
    while(T--)
    {
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        memset(c, 0, sizeof(c));
        scanf("%s %s", &a, &b);
        int lena = strlen(a);
        int lenb = strlen(b);
        int tmp;
        int v = 0, k = 0;
        for(int i = lena-1, j = lenb-1;; --i, --j)
        {
            if(i < 0 && j < 0) break;
            if(i < 0) tmp = b[j]-'0'+v;
            else if(j < 0) tmp = a[i]-'0'+v;
            else tmp =(a[i]-'0')+(b[j]-'0')+v;
            c[k] = tmp % 10; //取個位
            v = tmp/10; //取要進的位
            if(((i == 0)&&(j <= 0) || (j == 0)&&(i <= 0)) && v != 0) c[++k] = v;
            k++;
        }
        printf("Case %d:\n", ++cas);
        printf("%s + %s = ", a, b);
        for(int i = k-1; i >= 0; --i) printf("%d", c[i]);
        if(T) printf("\n\n");
        else printf("\n");
    }
}
View Code

若有疑問,歡迎評論指出!string

相關文章
相關標籤/搜索