"Найти сумму всех чисел, кратных 3 или 5 меньше 1000"
У меня проблемы с пониманием того, почему приведенное ниже решение по-прежнему возвращает правильный результат, потому что 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)
}
n
является положительным целым числом, но на самом деле ничего не значит, еслиn
имеет дробную часть. Вы можете действительно использовать его, только если вы имеете дело исключительно с целыми числами. Вы действительно ожидали, что сложите кучу целых чисел и получите нецелочисленный ответ? - person Dawood ibn Kareem   schedule 26.01.2017