大數問題 hdu 1002

大數問題通常用數組來模擬計算。下面給出hdu 1002 的代碼。

 

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

#define MAX_LEN 1000
int g_a[MAX_LEN];
int g_b[MAX_LEN];
int g_ans[MAX_LEN];
char g_stra[MAX_LEN + 1];
char g_strb[MAX_LEN + 1];

int main()
{
    int t, i, j, n;
    int la, lb;
    int len;
    char startOutput;
    //freopen("test.txt", "r", stdin);

    scanf("%d", &t);
    for (n = 1; n <= t; ++n)
    {
        scanf("%s", g_stra);
        scanf("%s", g_strb);
        la = strlen(g_stra);
        lb = strlen(g_strb);
        j = 0;
        for (i = la - 1; i >= 0; --i)
        {
            g_a[j++] = g_stra[i] - '0';
        }
        j = 0;
        for (i = lb - 1; i >= 0; --i)
        {
            g_b[j++] = g_strb[i] - '0';
        }
        memset(g_ans, 0, sizeof(g_ans));
        for (i = 0, j = 0; i < la && j < lb; ++i, ++j)
        {
            g_ans[i] += (g_a[i] + g_b[i]);
            if (g_ans[i] >= 10)
            {
                g_ans[i] -= 10;
                g_ans[i+1]++;
            }
        }
        while (i < la)
        {
            g_ans[i] += g_a[i];
            if (g_ans[i] >= 10)
            {
                g_ans[i] -= 10;
                g_ans[i+1]++;
            }
            ++i;
        }
        while (j < lb)
        {
            g_ans[j] += g_b[j];
            if (g_ans[j] >= 10)
            {
                g_ans[j] -= 10;
                g_ans[j+1]++;
            }
            ++j;
        }
        len = (i > j) ? i : j;
       
        if (g_ans[len] >= 10)
        {
            g_ans[len] -= 10;
            g_ans[++len]++;
        }
        printf("Case %d:\n", n);
        printf("%s + %s = ", g_stra, g_strb);
        startOutput = 0;
        while (len >= 0)
        {
            if (startOutput)
            {
                printf("%d", g_ans[len]);
            }
            else if (g_ans[len])
            {
                startOutput = 1;
                printf("%d", g_ans[len]);
            }
            --len;
        }
        if (n != t)
        {
            printf("\n\n");
        }
        else
            printf("\n");
       
    }

    return 0;
}

發佈了44 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章