Java 计算 1 到 100 求和:循环 vs 数学公式

Java 计算 1 到 100 求和:循环 vs 数学公式

同样的结果,两种思路,差距有多大?

引言

计算 1+2+3+…+100 看似入门,但藏着编程思维的两种典型范式

  • 循环累加:一步步算,通用但慢
  • 数学公式:一步到位,特定场景更快

这两种写法,面试经常被问到——考察的不是代码本身,是你对”问题建模”的理解深度。

1. 循环累加:通用解法

1
2
3
4
5
6
7
8
9
public class SumOneToHundred {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1+2+3+...+100 = " + sum);
}
}

运行结果1+2+3+...+100 = 5050

优点:通用——任何等差数列都能算,逻辑清晰。

缺点:100 次循环,慢但能跑。如果是 1 到 10 亿,性能瓶颈立刻暴露

2. 数学公式:O(1) 解法

高斯小时候发现:1+2+…+100 = 100 × (100+1) / 2 = 5050

这是等差数列求和公式sum = n × (n+1) / 2

1
2
3
4
5
6
public class SumOneToHundred {
public static void main(String[] args) {
int sum = 100 * (100 + 1) / 2;
System.out.println("1+2+3+...+100 = " + sum);
}
}

运行结果1+2+3+...+100 = 5050

优点O(1) 时间复杂度,一次计算完成。

缺点只适用于等差数列——如果求 1²+2²+…+100²,公式不一样。

3. 两种写法对比

维度 循环累加 数学公式
时间复杂度 O(n) O(1)
通用性 ✅ 任何累加 ❌ 仅等差数列
代码量 4-5 行 1 行
可读性 直观 需数学基础
大数据性能 极快
溢出风险 取决于 n 中间计算可能溢出

关键点:如果 n=100,两种写法没区别;如果 n=10亿,公式法瞬间出结果,循环法可能跑几秒。

4. 实战建议

先写对的,再写快的

日常开发中:

  • n < 1万:循环就够了,别过度优化
  • n > 100万:考虑公式化或流式处理
  • 面试遇到先说循环,再主动提出公式优化——展示你看到了”问题有更优解”

总结

1+2+…+100 这个问题藏着编程的两层思维:

  • 第一层:循环累加——通用、稳妥
  • 第二层:数学建模——找到规律,一步到位

下一步:用同样思路看 1²+2²+...+n²1×2 + 2×3 + ... 这类问题,先找公式再写代码