CodeChef提交求1~N和的C#代码结果正确却判Wrong Answer原因
问题描述
给定数字N,求1到N所有数的和。
输入输出要求
- 输入:第一行包含数字N
- 输出:单独一行打印答案
约束条件
1 ≤ N ≤ 10^9
样例
- 样例输入1:4
- 样例输出1:10
- 样例输入2:8
- 样例输出2:36
报错原因分析
Wrong Answer的核心问题是使用double类型存储整数运算结果,存在两个致命问题:
- 精度丢失:double是双精度浮点数,仅能精确表示不超过
2^53(约9e15)的整数。当N取最大值1e9时,求和结果约为5e17,远大于double的精确整数范围,计算结果会出现偏差。 - 输出格式错误:double类型输出整数结果时会自动携带小数后缀,比如结果为10时会输出
10.0,和题目要求的纯整数输出格式不符,直接被判错。 - 额外冗余输入:末尾的
Console.ReadLine()会导致程序等待额外输入,部分判题环境下会触发超时或者运行错误。
修正后代码
using System; public class Test { public static void Main() { long N = Convert.ToInt64(Console.ReadLine()); long sum = N * (N + 1) / 2; Console.WriteLine(sum); } }
修正点说明
- 用
long(64位有符号整数)替代double,取值上限约为9e18,完全覆盖1e9场景下的求和结果,无精度丢失问题 - 直接输出整数类型的计算结果,格式完全符合题目要求
- 删除冗余的输入读取逻辑,避免判题流程异常
内容的提问来源于stack exchange,提问作者Ujjwal Abhishek
相关产品推荐
相关产品推荐

