我有以下程序平方和 1^2 + 2^2 + … + N^2 计算为: 示例输出:
java SumSquares 2 = 5
java SumSquares 3 = 14
java SumSquares 1000000 = 333333833333500000
这是我到目前为止所拥有的:
int N = Integer.parseInt(args[0]);
int sum = 0;
long R;
for (int i = 1; i <= N; i++) {
R = i * i;
if (i != R / i) {
System.err.println("Overflow at i = " + i);
System.exit(1);
}
sum += R;
}
System.out.println(sum);
我的输出是 java SumSquares 100000000 Overflow at i = 46341
由于 46341^2 通过了 MAX INT。
我只是无法让程序输出以下说明,任何关于如何获取的想法
java SumSquares 100000000 在 i = 3024616 处溢出
我可以将整数更改为长整数,但这会否定溢出检查的需要。
从规格:
计算会溢出。我需要通过检查新总和是否(严格)小于旧总和来准确确定总和中发生溢出的点。
java SumSquares 100000000 在 i = 3024616 处溢出
请注意,以上必须通过循环中的一般溢出处理来实现,而不是通过某些预先确定的输入测试来实现。因此,当用于求和的整数类型被更大的类型替换时,您的程序将完全使用新的扩展范围。
只是为了澄清:是否有可能获得输出
java SumSquares 100000000 在 i = 3024616 处溢出
根据规范。
鸿蒙传说
湖上湖
相关分类