2015-07-26 8 views
0

Я пытаюсь напечатать все распространенные множители двух целых чисел, которые меньше определенного предела (100 в моем случае). Однако, когда я вызываю свою функцию, она ничего не делает. Это мой код:Как печатать общие кратные два числа?

void com_mul(int a, int b) 
{ 
    int original = b; 

    for(int i = 1; a <= 100; i++) 
    { 
     a *= i; 
     b = original; 
     for(int j = 1; b <= a; j++) 
     { 
      b *= j; 
      if(a == b) 
       cout << b << ", "; 
     } 
    } 
} 
+0

Поскольку вы не используете переменную итерации в цикле 'for', вы можете вместо этого использовать циклы while. * Ничего, я слепой. * –

+0

@BenN Hes использует итерационные переменные 'a * = i' и' b * = j'. Он мог использовать цикл while, но я думаю, что для цикла лучше для того, как он атакует эту проблему. – JackV

+0

Ой, ох, я слепой! Не обращайте внимания на мой предыдущий комментарий, извините. @JackV –

ответ

0

Испытан с a = 4, b = 2, max = 100 на моей машине. И он выдает 4. Это из-за линии for (int j = 1; b <= a; j++). j может только идти вверх до 'a'

Я думаю это было бы.

#include <iostream> 
#include <string> 

int main() 
{ 
    int a, b, max; 

    std::cin >> a >> b >> max; 

    for (int i = a; i <= max; i++) 
    { 
     if (i%a == 0 && i%b == 0) 
      std::cout << i << std::endl; 
    } 

    return 0; 
} 
1

Вы можете решить эту проблему гораздо проще, используя один цикл.

В итерации в for петли над потенциальными делителей d от 1 до 100. Если d делит как a и b, печать d.

Вы можете сказать, если число делит другое число, применяя оператор % и проверку результата на ноль:

if (a%d == 0 && b%d == 0) { 
    cout << d << endl; 
} 
Смежные вопросы