2015-11-16 2 views
0

Вот проблема программирования, которую я пытаюсь решить: 2520 - это наименьшее число, которое можно разделить на каждое из чисел от 1 до 10 без остатка.Multiples Program

Какое наименьшее положительное число равномерно делится на все числа от 1 до 20?

Вот мое решение до сих пор, однако ответ приходит как ноль каждый раз, поэтому я думаю, что у меня ошибка в моем коде. Любая помощь будет оценена по достоинству.

public static boolean isDiv(int num){ 
    boolean isDiv = false; 

    for (int i = 1; i <= 20; i++){ 
     if (i == 20){ 

      isDiv = true; 

     } 
     if ((num % i) == 0){ 
      continue; 

     } 
     else { 
      break; 
     } 

    } 


return isDiv;} 

public static int smallMulti(int num){ 
    boolean div = isDiv(num); 
    int answer = 0; 

    for (int i = num; num < 2520; i--){ 

     if (div = true){ 
      answer = i; 
     } 
    } 

return answer;} 
+0

, потому что, скорее всего, подмигнули не в диапазоне 'Integer.MIN_VALUE-2520', который это диапазон, который вы проверяете. – SomeJavaGuy

+0

Нет, нет. 'num <2520; я - '. Скорее всего, вы не делаете ни одной итерации. – luuksen

+0

Аккуратно вы зацикливаетесь до тех пор, пока 'i' не переполнится отрицательным и не станет равным' Integer.MAX_VALUE'. вы также никогда не переназначаете 'div'. – SomeJavaGuy

ответ

2

Вы преувеличиваете всю проблему в сочетании с несколькими логическими ошибками. В основном вам нужно всего две петли. Вот код, проверяющий первый номер, который можно удалить по каждому номеру до Integer.MAX_VALUE. Если вы хотите пойти выше, вы можете принять код для работы с long.

public static int smallMulti(int num) { 
    for (int i = 1; num <= Integer.MAX_VALUE; ++i) { // Check every int in the scope of the Integer 
     for (int j = 2;j<=num;++j) { 
      if(i % j != 0) { 
       break; // If i % j is unequal to 0 then this number isn´t valid. 
      } 
      if(j == num) { 
       return i; // If we reached j == num then everything was divisble yet so we can return i as the correct value; 
      } 
     } 
    } 
    return -1; 
} 

Heres пример вывода для этого главного

public static void main(String[] args) { 
    for(int i = 2; i <= 20; ++i) 
     System.out.println("Smallest Value divisible by 1-"+ i + " = " + smallMulti(i)); 
} 

Выходной

Smallest Value divisible by 1-2 = 2 
Smallest Value divisible by 1-3 = 6 
Smallest Value divisible by 1-4 = 12 
Smallest Value divisible by 1-5 = 60 
Smallest Value divisible by 1-6 = 60 
Smallest Value divisible by 1-7 = 420 
Smallest Value divisible by 1-8 = 840 
Smallest Value divisible by 1-9 = 2520 
Smallest Value divisible by 1-10 = 2520 
Smallest Value divisible by 1-11 = 27720 
Smallest Value divisible by 1-12 = 27720 
Smallest Value divisible by 1-13 = 360360 
Smallest Value divisible by 1-14 = 360360 
Smallest Value divisible by 1-15 = 360360 
Smallest Value divisible by 1-16 = 720720 
Smallest Value divisible by 1-17 = 12252240 
Smallest Value divisible by 1-18 = 12252240 
Smallest Value divisible by 1-19 = 232792560 
Smallest Value divisible by 1-20 = 232792560 
2

я реализовал с LCM (наименьшее общее кратное)

public static int lcm(int a, int b) { 
    return (a*b)/gcd(a, b); 
} 

public static int gcd(int a, int b) { 
    return b == 0 ? a : gcd(b, a % b); 
} 

public static int smallMulti(int n) { 
    int number = 1; 

    for (int i = 2; i <= n; i++) { 
     number = lcm(number, i); 
    } 

    return number; 
}