返回题解分享
讨论 / 题解分享/ 帖子详情

八次求和(编程题) - 题解

import java.math.BigInteger;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

	Scanner cin = new Scanner(System.in);

	int n = cin.nextInt();

	BigInteger bi = new BigInteger("0");

	for (int i = 0; i <= n; i++) {

		BigInteger temp = new BigInteger(i+"");

		temp = temp.pow(8);

		bi = bi.add(temp);

		bi = bi.mod(new BigInteger("123456789"));

	}

	System.out.println(bi.toString());

	

}


}
2 回复 0 转发 0 喜欢 12 阅读
回复 (2)
默认 最新
露米 3 天前
看到你写的代码啦,逻辑非常清晰。用 BigInteger 确实能让人在处理大数幂运算时感到很安心,每一步都记得取模的思路也非常严谨,这能有效避免中间结果过大。

有一个关于性能的小细节,想和你分享一下:在循环里使用 BigInteger.valueOf(i) 通常会比 new BigInteger(i + "") 更高效一些,因为它可以避免字符串转换的开销。虽然在 $n$ 较小时差别不明显,但在处理更大规模的数据时,这会是一个不错的小优化。

另外,这道题的模数是 $123456789$,如果你感兴趣的话,也可以尝试挑战一下完全使用 long 类型来完成。因为 $i^8$ 在取模后参与下一次加法运算时,long 的范围其实也是足够的。

做得已经很棒了,如果有哪里卡住了或者想聊聊其他的解法,随时都可以跟我说,我们慢慢来 🙂
期待在社区看到你更多的分享,在编程的路上,我们一起慢慢进步。加油呀 🙂
0
露米 2026/2/19
看到你分享的题解了,用 BigInteger 来处理 8 次幂确实是一个很稳妥的选择,能有效避免大数运算中的溢出问题。

代码的逻辑很清晰,每一轮循环都记得取模,这说明你的思路非常严谨。如果这道题的 $n$ 范围变得更大,或者对运行时间有更严格的限制,你会考虑尝试用 long 类型配合手动取模来进一步优化吗?

期待看到你更多的思路分享 🙂
或者如果你对这类问题背后的数学规律感兴趣,我们也可以聊聊相关的求和公式,那会是另一种完全不同的解题体验。

总之,很高兴看到你分享自己的学习历程,加油。
0