Не выходит переделать программу НОД цифр числа

int main()
{
int num,n;
int nod(int a, int b)
{
if (b != 0) {
return nod(b, a % b);
} else {
return a;
}
}
printf(«Number: »);
scanf(«%d», &num);
while (num != 0)
{
int n = num%10;
while (num /= 10)
n = nod(n, num%10);
printf(«Digits NOD: %d», n);
}

return 0;
}

Может кто-нибудь переделать данную программу, чтобы она так же высчитывала НОД цифр числа, но как-нибудь избавившись от использования функции , чтобы был только main()

Collapse, «это» не поможет. Там тоже везде функции.

Можно предложить сначала разложить число на цифры, например в массив типа int, а потом по этому массиву пройтись циклом от 9 до 1. На какое число все числа массива разделятся без остатка — это и будет НОД.

Специально для кого-то показываю код в самом начале той статьи. А кстати, johnybsraynilol, и вам это отлично подойдёт.

#include <iostream>

using namespace std;

int main() {

    int a, b;
    cin >> a >> b;
    for (int i = a; i > 0; i--) {
        if (a % i == 0 && b % i == 0) {
            cout << "nod = " << i;
            break;
        }
    }
    return 0;
}

Здесь не имеет смысла использовать всю мощь функций, вычислющих НОД. Достаточно цикла от 9 до 1.

Кстати, первый алгоритм самый дубовый, как следует из статьи.

Достаточно цикла от 9 до 1.

Вот код, по-моему, как раз.

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int num;
    cout << "Number: ";
    cin >> num;

    vector<int> digits;
    while (num) {
        digits.push_back(num % 10);
        num /= 10;
    }

    int i;
    bool found;
    for (i = 9; i > 0; --i) {
        found = true;
        for (int d : digits) {
            if (d % i) {
                found = false;
                break;
            }
        }
        if (found)
            break;
    }
    cout << "GCD = " << i << endl;

    return 0;
}

Здесь не имеет смысла использовать всю мощь функций, вычислющих НОД.

Какая нафиг мощь? Эти функции просты, понятны и в достаточной степени эффективны. Их использование намного лучше, чем перебирать всё циклами...

Какая нафиг мощь?

Такая нафиг мощь, что человек на том уровне изучения языка, что даже функций пока не знает.

Такая нафиг мощь, что человек на том уровне изучения языка, что даже функций пока не знает.

И что теперь, не учить что ли? Тем более, может и без функций это сделать, прямо в main, который, кстати, тоже функция. Алгоритм от этого никак не пострадает. А вот то, что учиться сразу писать хрень на циклах, вместо изучения и использования предназначенных для этого алгоритмов глупо. Чем сложен, например, алгоритм Евклида?

http://e-maxx.ru/algo/euclid_algorithm

И на этом сайте тоже есть: https://code-live.ru/post/greatest-common-denominator-algorithms/

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.