Blog·Tanky WooABOUTRSS

百练oj2981 大整数加法

15 May 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

//ID:百练oj2981 大整数加法 //网站:C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛 //地址:http://www.cppleyuan.com/ //个人主页:www.wutianqi.com

总结: 思想:用字符串输入---》每个元素都减去'0',用整型数组保存,然后两整型数组相加。中间记的在用整型数组保存时是倒序的。这样可以用于超出一位。 注意:对于0 0的特殊情况要考虑,且记得忽略前置无用的0。

 #define MAX_LEN 200
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];

int main()
{
    scanf("%s", szLine1);
    scanf("%s", szLine2);

    int i, j;
    memset(an1, 0, sizeof(an1));
    memset(an2, 0, sizeof(an2));

    int nLen1 = strlen(szLine1);
    j = 0;
    for(i = nLen1-1; i >= 0; i--)
        an1[j++] = szLine1[i] - '0';

    int nLen2 = strlen(szLine2);
    j = 0;
    for(i = nLen2-1; i >= 0; i--)
        an2[j++] = szLine2[i] - '0';

    for(i = 0; i < MAX_LEN; i++)
    {
        an1[i] += an2[i];
        if(an1[i] >= 10)
        {
            an1[i] -= 10;
            an1[i+1]++;
        }
    }

    bool bStartOutput = false;
    if(strcmp(szLine1, "0") == 0 && strcmp(szLine2, "0") == 0)
        printf("0");
    else
    {
        for(i = MAX_LEN; i >= 0; i--)
        {
            if(bStartOutput)
                printf("%d", an1[i]);
            else if(an1[i])
            {
                printf("%d", an1[i]);
                bStartOutput = true;
            }
        }
    }
    putchar('\n');
    return 0;
}