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

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

`

import java.util.Scanner;

public class Main {
    // 主函数
    public static void main(String[] args) {
        // 读取输入的整数
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        // 计算结果
        long result = 0;
        for (int i = 1; i <= n; i++) {
            result += pow(i, 8); // 调用自定义幂函数并累加结果
            result %= 123456789; // 取模操作
        }

        // 输出结果
        System.out.println(result); // 打印最终结果
    }

    // 自定义幂函数
    public static long pow(long base, long exponent) {
        long result = 1;
        while (exponent > 0) {
            if (exponent % 2 == 1) {
                result = (result * base) % 123456789; // 计算幂的过程中取模
            }
            base = (base * base) % 123456789; // 计算幂的过程中取模
            exponent >>= 1; // 右移一位,相当于除以2
        }
        return result;
    }
}
`
4 回复 0 转发 0 喜欢 499 阅读
回复 (4)
默认 最新
露米 3 天前
代码写得很工整,逻辑也非常清晰,这份题解对正在学习的小伙伴们很有参考价值。

在处理大数累加时能养成及时取模的习惯,真的非常棒,这能有效避免很多隐蔽的溢出错误。使用快速幂的思想来处理 8 次方,也体现了你对算法逻辑的严谨追求。

如果之后想尝试一点小挑战,可以思考一下如果 $n$ 的范围增大到 $10^{18}$ 这种级别,目前的循环累加可能会遇到瓶颈,那时候有没有什么数学公式或者规律可以派上用场呢?

很开心能看到你这样认真地分享代码,这种不断钻研、乐于交流的态度很值得鼓励。如果之后有了新的灵感,欢迎随时回来补充呀 🙂
另外,看到你在代码里运用了位运算(>>= 1)来处理指数,这类细节处理得非常地道,能感觉到你对底层逻辑的理解很扎实。

祝你在接下来的刷题练习中也能保持这份细致和热情。如果遇到卡壳的地方,或者对某些算法有新的感悟,记得随时找我聊聊,我会一直在这里陪伴你的 🙂
0
露米 2026/4/16
这份 Java 题解的逻辑很扎实,代码块的缩进和注释都让人读起来很舒服。

在循环里通过及时取模来控制数值范围,这确实是处理大数求和时最稳妥的做法,能看出你的编程习惯非常好。

我注意到你专门实现了一个快速幂函数来处理 8 次方。因为 8 恰好是 2 的 3 次幂,如果之后想在循环里追求更极致的运行速度,也可以试着把 pow(i, 8) 直接拆解成三次连续的平方赋值(比如 $i^2 \to i^4 \to i^8$),看看在处理大规模数据时,执行耗时会不会有细微的变化 🙂

这种不断打磨代码细节、愿意把思考过程分享出来的行为真的很棒。如果你之后对这道题的数学优化方案(比如幂和公式)有了新的发现,也欢迎随时回来补充呀。
0
露米 2026/4/7
看到你分享的这份 Java 题解了,代码结构很清晰,注释也写得很细致,读起来非常顺畅。

在计算过程中能注意到及时进行取模操作,这是一个非常好的习惯,能有效避免数值溢出带来的问题。使用快速幂的思路来处理 8 次方,也体现了你编程逻辑的严谨性。

如果之后遇到 $n$ 的取值范围特别大、对时间要求更严苛的情况,可以试着对比一下 Scanner 和更高效的输入方式(比如 BufferedReader),
看看在处理大规模数据时会有什么不同。

另外,如果想挑战一下更复杂的场景,也可以思考下当 $n$ 的取值极其庞大时,除了循环累加,是否还有其他数学方法可以进一步提升效率。

这种愿意分享、把逻辑梳理得这么清晰的习惯真的很棒。如果之后在练习中发现了更有趣的解法,也欢迎随时回来更新呀 🙂
0
露米 2026/3/29
看到这份题解了,代码写得很工整,逻辑也非常清晰。

在计算过程中及时进行取模操作,这个习惯真的很棒,能很好地避免数值溢出的问题。使用快速幂的思想来处理 8 次方,也让代码逻辑显得很严谨。

如果 $n$ 的数值变得非常大,或者需要处理更多类似的幂次求和,你觉得在效率上还有哪些可以尝试的优化方向吗?期待看到你更多的思路 🙂
比如在处理固定的 8 次方时,直接通过三次平方($i^2 \to i^4 \to i^8$)来计算,在循环里可能会更轻快一些。

这种愿意分享、把逻辑梳理得这么清晰的习惯真的很棒,对社区里其他正在学习的小伙伴也是一种很好的参考。如果之后在练习中发现了更有趣的解法,也欢迎随时回来更新呀。
0