“求 1000 以下的 3 或 5 的所有倍数之和”
我无法理解为什么下面的解决方案仍然返回正确的结果,因为 x3、x5 和 x15 在除法后使用 int。这意味着除法的结果总是四舍五入,小数点被忽略。
当我尝试用双打替换所有 3 个整数时,我得到了错误的结果。
该解决方案基于以下观察:
1 + 2 + ... + n = n*(n+1)/2
public static void main(String[] args) {
int nr = 1000;
nr--;
int x3 = nr/3;
int x5 = nr/5;
int x15 = nr/15;
long sum1 = 3*x3*(x3+1);
long sum2 = 5*x5*(x5+1);
long sum3 = 15*x15*(x15+1);
long sum = (sum1+sum2-sum3)/2;
System.out.println(sum)
}