美文网首页C语言学习C语言
杭电oj-1002--A + B Problem II

杭电oj-1002--A + B Problem II

作者: 小小Henry | 来源:发表于2019-10-11 23:13 被阅读0次

    很多细节,,,,,,,

    #include <stdio.h>
    #include <string.h>
    
    void Sum(char a[], char b[], int c[], int lena, int lenb);
    
    
    int main(void)
    {
        char a[1000] = { 0 }, b[1000] = { 0 };
        int c[1001] = { 0 };
        int  number, i, j, lena, lenb, max;
        scanf("%d", &number);
    
        for (i = 0; i < number; i++)
        {
            /************初始化***************/
            char a[1000] = { 0 };
            char b[1000] = { 0 };
            int c[1001] = { 0 };
            /*******************************/
    
            /***********Input**************/
            scanf("%s", a);
            scanf("%s", b);
            lena = strlen(a);
            lenb = strlen(b);
            /******************************/
    
            /*************求和***********/
            Sum(a, b, c, lena, lenb);
            max = lena > lenb ? lena : lenb;
            /**************************/
    
            /*************Output*********/
            printf("Case %d:\n", i + 1);
            printf("%s + %s = ", a, b);
            if (c[0])
                j = 0;
            else
                j = 1;
            for (j; j <= max; j++)
                printf("%d", c[j]);
    
            if (i != number - 1)
                printf("\n\n");
            else
                printf("\n");
            /****************************/
        }
        return 0;
    }
    
    
    
    /*将a和b数组中的大数相加,将结果存储到c中去,返回相加后的长度lenc*/
    void Sum(char a[], char b[], int c[], int lena, int lenb)
    {
        int temp;
        int  max;
        max = lena > lenb ? lena : lenb;
        while (lena > 0 && lenb > 0)
        {
            temp = a[--lena] + b[--lenb] +c[max] - 48 -48;
            //如果产生进位
            if (temp/10)
            {
                c[max]   = temp%10;
                c[max-1] = temp/10;
            }
            //不产生进位
            else
            {
                c[max] = temp;
            }
            max--;
        }
        /***********a比b短*******************/
        while(lenb>0)
        {
            c[max] += b[--lenb]-48;
            if (c[max]/10)
            {
                c[max-1] = c[max]/10;
                c[max]  %= 10;
            }
            max--;
        }
        /*********************b比a短********/
        while(lena>0)
        {
            c[max] += a[--lena] -48;
            if (c[max]/10)
            {
                c[max-1] = c[max]/10;
                c[max]  %= 10;
            }
            max--;
            
        }
    }
    

    相关文章

      网友评论

        本文标题:杭电oj-1002--A + B Problem II

        本文链接:https://www.haomeiwen.com/subject/ymkfmctx.html