2016-03-19 4 views
-1

Упражнение:Почему мой код иногда работает не так, как ожидалось?

Найти сумму всех чисел, кратных 3 или 5 ниже N.

Я использовал BigInteger так что я могу обрабатывать большие числа. Я передаю первый тестовый пример, но по представлению я прохожу только один из шести тестовых случаев. Таким образом, есть проблема с моим кодом, но я не знаю, что я делаю неправильно. Кто-нибудь может мне помочь? Спасибо.

Это то, что я получил:

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    Solution solution = new Solution(); 
    for (int i = 0; i < 3; i++){ 
     long input = scanner.nextLong(); 
     BigInteger sums = new BigInteger("0"); 
     sums = sums.add(solution.calculateSum(input));    
     if (sums.signum() == 1){ 
      System.out.println(sums); 
     } 
    } 
} 

private BigInteger calculateSum(long input){ 
    input--; 
    long totalElements = 0; 
    BigInteger sums = new BigInteger("0"); 
    if (input >= 3){ 
     totalElements = input/3; 
     sums = sums.add(BigInteger.valueOf((totalElements * (3 + totalElements *3))/2)); 
    } 
    if (input >= 5){ 
     totalElements = input/5; 
     sums = sums.add(BigInteger.valueOf((totalElements * (5 + totalElements *5))/2)); 
    } 
    if (input >= 15){ 
     totalElements = input/15; 
     sums = sums.subtract(BigInteger.valueOf((totalElements * (15 + totalElements *15))/2)); 
    } 
    return sums; 
}} 
+0

ли вы имеете в виду [Проблема 1 - Проект Эйлера] (https://projecteuler.net/problem=1)? Вам не нужно будет суммировать все ответы от каждого тестового примера. – MikeCAT

+0

Спасибо за ваш ответ. Да, я имею в виду проблему 1. В моем коде я не суммирую все тестовые примеры, или я сделал что-то неправильно? – user3505506

+0

Вам нужно искать функцию модуля, если (%) N% 3 == 0, N% 5 == 0. – VeenarM

ответ

0

Ваша процедура для решения тестовых случаев совершенно неправильно. Прочтите заявление и следуйте этому.

Также вам не понадобится дополнение и проверка знака.

Попробуйте это:

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    Solution solution = new Solution(); 
    int size = scanner.nextInt(); 
    for (int i = 0; i < size; i++){ 
     long input = scanner.nextLong(); 
     BigInteger sums = solution.calculateSum(input); 
     System.out.println(sums); 
    } 
} 
+0

Разве это хорошая идея, чтобы публиковать ответы, касающиеся 'ProjectEuler'? –

+0

Спасибо большое :). Оно работает. Ты мой герой. Можете ли вы дать мне больше информации о том, что я сделал не так? – user3505506

+0

Я вижу, что я сделал не так. Я думал, что каждый раз есть 3 входа, по-видимому, разные входы. – user3505506

Смежные вопросы