HDUOJ-1001: 计算从1到n的和

1. 题目 Sum from 1 to n [Click it for more details]

2. 我的解答:

import java.io.*;

public class Main
{

    public static int  sumOneByOne(int n){
        int sum=0;
        for(int i=1;i<=n;i++){
            sum+=i;
        }
        return sum;
    }
    /*
    public static int sumByFormula(int n) {
        return (n*(n+1))/2;
    }*/

    public static void main(String[] args) throws Exception
    {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        int a, b;
        while(in.nextToken() != StreamTokenizer.TT_EOF)
        {
            a = (int)in.nval;
            out.println(sumOneByOne(a));
            out.println();
        }
        out.flush();
    }
}

3. 出现的问题与原因解析

3.1 Wrong Answer

显而易见,这种错误就是说程序的输出结果是不正确的。刚开始的时候我用的是下面的数学公式去计算结果的。
1到n的和的公式
在上面的源代码中,我注释掉的方法sumByFormula就是我一开始用的解题方法。但是该方法有个问题,就是当它计算n乘以(n+1)时,这会比一个一个地累加,会更快地溢出。Online Judge的测试用例估计会测试比较大的数。所以,Online Judge系统会判定为 Wrong Answer.

从中获得的经验:

  • sumOneByOne虽然效率不如sumByFormula, 但是它能够处理的数据范围却更大。
3.2 Presentation Error

这个是因为我受了题中输出示例的影响,以为最后那个结果的后面没有额外的一个空行。无论如何,如下的格式是期望的,
正确的输出格式
开始我的程序的输出时下面错误的格式:
此处输入图片的描述
获得的经验:
- 空行本质上就是就是CRLF.(在Windows系统上)
- CR LF是打印机的概念。其中, CR:carriage return 打字头归位的动作; LF: Line Feed 打字机上卷一行的动作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值