浏览器标题切换
浏览器标题切换end

大数加法

Integer Inquiry POJ - 1503

解题思路:我是把所有要求的数据全部输入,定义成二维数组,以0结束以记录有几组数据,然后按列计算每列的答案,通过对每位取整取余进行进位及输出。

  1. 这题有一个坑,给出的例子最后一行为0,代表输入结束,也就是说,你必须输入0回车之后才能出结果,而不是输入0代表程序整体结束。
    在这里插入图片描述

  2. 此题前导0是可以计算的。
    在这里插入图片描述

  3. 该代码可以AC,(但不知道为啥)但是只限于给出的字符串位数相同,一旦有一行数据长度不满足,就会存在’\0’的情况,就会造成如图所示情况。但题目存在bug,这样竟然可以AC。
    在这里插入图片描述

#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f

const int N=110;
char a[N][N];
int b[N];

int main()
{
    int i,j,l,k=0;
    int maxx=-INF;
    for(i=0; ; i++) //因为不知道有多少组数据需要相加
    {
        scanf("%s",a[i]);
        l=strlen(a[i]);
        if(l>maxx)
            maxx=l;
        //     if(a[0][0]=='0')
        //注意一下,这样写结果是出不来的
        if(a[i][0]=='0'&&l==1)
        {
            break;
            //需要放在下面,避免把单独的0那一行算进去
        }
        k++;//表示输入了几组数据
    }
        int jinwei=0,c=0;
        for(i=maxx-1; i>=0; i--)
        {
            //倒着计算
            int sum=0;
            for(j=0; j<=k-1; j++)
            {
                sum=sum+a[j][i]-'0';
            }
            sum=sum+jinwei;//需要加上进位,第一次的进位为0
            
            if(sum>=10)
            {
                jinwei=sum/10;//这个进位留到下一位数字再加
                sum=sum%10;//该位取个位数
            }

            else
                jinwei=0;//如果sum不满10的话,无需进位
            //需要把jinwei清零
            b[c++]=sum;//sum为一位数,存到b数组里面去
            //从下标为0开始存//最后倒着输入

            if(i==0&&jinwei!=0)
                b[c++]=jinwei;
            //     b[c]=jinwei;
        }

        for(i=c-1; i>=0; i--)
            //  for(i=maxx-1;i>=0;i--)
            printf("%d",b[i]);
        printf("\n");
    return 0;
}

posted @ 2019-05-07 18:11  抓水母的派大星  阅读(89)  评论(0编辑  收藏  举报