1. 问题描述
- 求累加和时,为了防止int越界, n ∗ ( n + 1 ) / 2 n*(n+1)/2 n∗(n+1)/2,调整为 ( n / 2 ∗ ( n + 1 ) (n/2*(n+1) (n/2∗(n+1)结果导致错误;
2. 原因
- 当不能整除时,近似值导致出现误差;
- n 和 n+1 一定有一个能被2整除,所有 ( n + 1 ) ∗ n (n+1)*n (n+1)∗n一定能被2整除,但是n就不一定能被2整除了;
3. 解决方法
- 判断n和n+1谁能被2整除,能整除的除于2;
int result = n % 2 == 0 ? (n / 2 * (n + 1)) : ((n + 1) / 2 * n);
- 用long来接收结果;
long result1 = ((long) n * (n + 1)) / 2;
4. 小结
- 一定要细心、细心、再细心 !!!