Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我采用的是把输入数据转换后放进二维数组,然后用每列和做加法运算,注释写的很清楚,请帮我看看,我debug一天,改了不少错误,但就目前的测试数据是没问题的

Posted by guojiale at 2015-05-04 18:47:03 on Problem 1503
//看到有说数组大小开到250,我改了之后还是不行
//思路是将arr这个数组的每一行附上输入的值,然后求每列所有数之和,当然进位
//maxlen记录这个二维数组的有用就是可以加的长度列数,row用来记录行数,那就不用遍历二维数组所有行列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char tempArr[250];
    int arr[250][250],fin[250],i,row=0,maxlen=0,column;
    /*下面这个while循环用来把每次输入的字符串先放在tempArr里,然后转换,放到arr里面*/
    while(scanf("%s",tempArr)!=EOF)
    {
        int len;
        len=strlen(tempArr);
        column=249;
        if(tempArr[0]=='0' &&len==1)
            break;
        for(i=len-1;i>=0;i--)
        {
            arr[row][column]=tempArr[i]-'0';//arr每一行最后几列用来存数字
            column--;
        }
        row++;//row记录行数
        if(maxlen<len)
        {
            maxlen=len;//记录输入的数中那个数的长度最长
        }
    }
    /*下面就是大数加法的算法实现*/
    int temp=0,index=249;
    for(column=249;column>(247-maxlen);column--)//从最后一列开始加
    {//估计最多进两位,所以循环出去的条件我就随便写了,下面有跳过前导0的
        int columnSum=0;
        for(i=0;i<row;i++)
        {
            columnSum+=arr[i][column];
        }
        fin[index]=(columnSum+temp)%10;//对这个数组的赋值也是从fin最后开始的
        temp=(columnSum+temp)/10;
        index--;
    }
    //得到第一个不为0的fin下标,从左至右
    while(fin[index]==0)
        index++;
        //从哪个位置开始输出
    for(i=index;i<=249;i++)
    {
        printf("%d",fin[i]);
    }
    printf("\n");
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator