Назад Зміст Вперед

Задачі на перебір цифр натурального числа

Описаний нижче стандартний алгоритм дозволяє виконувати будь-які дії з цифрами натурального числа, в незалежності від значності числа.

Число, після використання цього алгоритму, стає рівним 0! Тому рекомендується зберігати вхідне значення числа у іншій змінній.

Приклад 1

Дано натуральне число n. Визначте у ньому суму цифр.

Результат роботи програми

Ввід Вивід
2345 14
15 6

Змінні:

Вхідні:

  1. n – натуральне число (цілого типу long int)

Вихідні:

  1. s – сума цифр числа (цілого типу)

Проміжні:

  1. c – остання цифра числа (цілого типу)

Алгоритм

  1. Спочатку потрібно ввести число.
  2. Нам потрібно знайти суму. Тому встановимо початкове значення суми 0.
  3. Згадаємо формулу знаходження останньої цифри числа: c= n % 10. Ця формула вірна для числа будь-якої значності.
  4. Згадаємо, що після виконання оператору n=n / 10, від числа відкидається остання цифра.
  5. На цих двох формулах заснований такий алгоритм: обчислюємо останню цифру числа, робимо з ній потрібні дії (знаходимо кількість, суму, найбільшу цифру, і.т.д), потім цифру відкидаємо. Це робимо, поки у введеному числі не залишиться цифр, тобто число стане 0.
  6. Коли цикл закінчиться, тобто будуть видалені всі цифри числа n виводимо на екран знайдену суму цифр.

Програма

#include <iostream>
using namespace std;
int main()
{
    long int n; int c, s = 0;  // n - вхідне число, c - поточна цифра, s - сума цифр
    cin >> n;  // Введення числа
    do
    {
        c = n % 10;  // Отримуємо останню цифру числа
        s = s + c;  // Додаємо цифру до суми
        n = n / 10;  // Видаляємо останню цифру з числа
    } while (n > 0);  // Повторюємо, доки в числі залишаються цифри
    cout << s;  // Виведення суми цифр
    return 0;
}

Приклад 2

Дано натуральне число. З’ясуйте, скільки разів у ньому зустрічається перша цифра.

Для розв’язання цієї задачі потрібно два перебори числа: перший перебір знаходить першу цифру числа, а другий перебір підраховує, скільки таких цифр у числі.

Результат роботи програми

Ввід Вивід Пояснення
5455 3 Перша цифра 5. Таких цифр 3
4 1 Перша цифра 4. Таких цифр 1

Змінні:

Вхідні:

  1. n – натуральне число (цілого типу long int)

Вихідні:

  1. k –кількість цифр числа, що дорівнюють першій цифрі.

Проміжні:

  1. c – остання цифра числа (цілого типу)
  2. x – змінна для запам’ятовування вхідного значення числа.

Алгоритм

  1. Спочатку потрібно ввести число.
  2. Потім потрібно знайти значення першої цифри. Для знаходження першої цифри будемо у циклі відкидати останню цифру у числі, поки не залишиться одна цифра. Цей цикл змінить число n, але значення цього числа нам ще буде потрібно для знаходження кількості, тому перед циклом, значення введеного числа потрібно зберегти у іншу змінну оператором x=n.
  3. Знайдемо першу цифру числа таким чином: перевіримо, якщо у числі n більше одної цифри, то відкинемо останню. Ясно, що це повинен бути цикл while, бо спочатку перевіряємо умову (чи потрібно відкидати цифру), а потім, якщо потрібно, відкидаємо. Докладніше цикл пошуку першої цифри:
    1. Перевіряється умова n>9.
    2. Якщо умова вірна, тобто у числі декілька цифр, то відкидається остання цифра оператором n=n / 10 і виконується перехід на початок циклу (знов на перевірку умови).
    3. Якщо умова невірна (тобто число складається з одної цифри), то тіло циклу пропускається і він завершується.
  4. Після завершення циклу у числі n залишиться тільки його перша цифра.
  5. Тепер потрібно знайти у числі кількість цифр, що дорівнюють n.
  6. Щоб у числі знайти кількість цифр, що дорівнюють n, будемо використовувати алгоритм, що описаний у прикладі 1. Але вхідне число n змінилося, тому будемо використовувати його копію у змінній x.
  7. Тобто у циклі будемо виконувати такі дії:
    1. Оператор c= x % 10 обчислює останню цифру числа x.
    2. Оператор if (c==n) перевіряє, чи збігається ця цифра з першою цифрою числа.
    3. Якщо так, то оператор k++ збільшує лічильник таких цифр.
    4. Оператор x=x / 10 відкидає останню цифру числа x.
    5. Перевіряється умова x==0 – чиє ще цифри у числі?
      1. Якщо умова не вірна, тобто цифри у числі є, то виконується перехід на початок циклу (пункт 7).
      2. Якщо умова вірна, тобто цифр у числі немає, то цикл завершується і виконується перехід на оператор, що іде після циклу (пункт 8).
  8. Коли цикл закінчиться, тобто будуть видалені всі цифри числа x виводимо на екран знайдену кількість.

Програма

#include <iostream>
using namespace std;
int main()
{
    long int n, x; int c, k = 0;  // n - оригінальне число, x - копія числа, c - поточна цифра, k - лічильник
    cin >> n;  // Введення числа
    x = n;  // Зберігаємо копію числа
    
    // Знаходимо першу цифру числа
    while (n > 9)  // Поки число має більше однієї цифри
    {
        n = n / 10;  // Відкидаємо останню цифру
    }
    
    // Рахуємо кількість цифр, що дорівнюють першій цифрі
    do
    {
        c = x % 10;  // Отримуємо останню цифру
        if (c == n)  // Якщо цифра співпадає з першою цифрою числа
        {
            k++;  // Збільшуємо лічильник
        }
        x = x / 10;  // Видаляємо останню цифру
    } while (x > 0);  // Повторюємо, доки в числі залишаються цифри
    
    cout << k;  // Виводимо кількість цифр, що дорівнюють першій цифрі
    return 0;
}

Приклад 3

Дано натуральне число n. Знайдіть максимальну цифру та її порядковий номер. Якщо максимальних цифр декілька, то визначте порядковий номер першої з них, якщо цифри рахувати зліва направо.

Для розв’язання цієї задачі потрібно використовувати два алгоритми: перший – перебір цифр числа, а другий – знаходження найбільшої цифри.

Результат роботи програми

Ввід Вивід Пояснення
4525 5 2 Найбільша цифра 5.
Якщо рахувати цифри зліва направо, то перша з них має порядковий номер 2.

Змінні:

Вхідні:

  1. n – натуральне число (цілого типу long int)

Вихідні:

  1. max–найбільша цифра числа n (цілого типу).
  2. nmax– порядковий номер першої максимальної цифри, якщо рахувати зліва направо (цілого типу).

Проміжні:

  1. c – остання цифра числа (цілого типу)
  2. k – порядковий номер цифри, якщо рахувати справа наліво та кількість цифр у числі (цілого типу).

Алгоритм

  1. Спочатку потрібно ввести число n.
  2. Встановимо початкове значення лічильника цифр оператором k=1.
  3. У циклі, що перебирає цифри, будемо виконувати такі дії:
    1. Оператор c= n % 10 обчислює останню цифру числа n.
    2. Якщо знайдена цифра перша або вона c>=max, то запам’ятовуємо значення c у змінній max оператором max=c та запам’ятовуємо порядковий номер k у змінній nmax оператором nmax=k.
    3. Оператор k++ збільшує лічильник цифр. Число перебирається, починаючи з останньої цифри, тому цей лічильник, вказує порядковий номер цифри, якщо їх рахувати справа наліво.
    4. Оператор n=n / 10 відкидає останню цифру числа n.
    5. Перевіряється умова n більше 0 – чиє ще цифри у числі?
      1. Якщо умова вірна, тобто цифри у числі є, то виконується перехід на початок циклу (пункт 3).
      2. Якщо умова не вірна, тобто цифр у числі немає, то цикл завершується і виконується перехід на оператор, що іде після циклу (пункт 4).
  4. Коли цикл закінчиться, у змінній max буде значення найбільшої цифри, а у змінній nmax її порядковий номер, якщо рахувати цифри у числі справа наліво. Але нам потрібно знайти порядковий номер найбільшої цифри, якщо цифри рахуються зліва направо.

    Якщо для порядкового номера найбільшої цифри при рахуванні справа та зліва використовувати одну і ту ж змінну nmax, то порядковий номер максимальної цифри, якщо рахувати зліва направо буде nmax=k-nmax.

  5. Потім виводимо на екран знайдені значення.

Програма

#include <iostream>
using namespace std;
int main()
{
    long int n; 
    int c, max_digit, max_pos = 1, k = 1;  // n - вхідне число, c - поточна цифра, max_digit - максимальна цифра, max_pos - її позиція, k - лічильник позицій
    cin >> n;  // Введення числа
    
    do
    {
        c = n % 10;  // Отримання останньої цифри
        if (k == 1 || c >= max_digit)  // Якщо це перша цифра або цифра більша/рівна поточному максимуму
        {
            max_digit = c;  // Оновлюємо максимальну цифру
            max_pos = k;    // Запам'ятовуємо її позицію
        }
        k++;          // Збільшуємо лічильник позицій
        n = n / 10;   // Видаляємо останню цифру
    } while (n > 0);  // Повторюємо, доки є цифри
    
    int nmax = k - max_pos;  // Обчислюємо позицію від початку числа
    cout << max_digit << " " << nmax;  // Виводимо максимальну цифру та її позицію
    return 0;
}

Варіанти задач

  1. Дано натуральне число n. Знайдіть кількість цифр 5.
  2. Дано натуральне число n. Знайдіть суму квадратів його цифр.
  3. Дано натуральне число n. Знайдіть середнє арифметичне його цифр.
  4. Дано натуральне число n. Знайдіть добуток його цифр.
  5. Дано натуральне число. Знайти його першу цифру.
  6. Дано натуральне число n. Знайдіть суму його першої та останньої цифр.
  7. Дано натуральне число. Знайти його другу (с початку) цифру.
  8. Дано натуральне число. Чи є в ньому цифра 3?
  9. Дано натуральне число. З’ясуйте, скільки разів у ньому зустрічається остання цифра.
  10. Дано натуральне число n. З’ясуйте, скільки разів у ньому зустрічається цифра A.
  11. Дано натуральне число n. Чи вірно, що сума його цифр більша за D?
  12. Дано натуральне число n. Чи вірно, що добуток його цифр більше за B?
  13. Дано натуральне число n. Чи є в ньому цифра A?
  14. Дано натуральне число. Чи вірно, що воно починається та закінчується однаковими цифрами?
  15. Дано натуральне число. З’ясуйте, чи є різниця між його максимальною та мінімальною цифрами парним числом.
  16. Дано натуральної число. З’ясуйте, яка цифра розташована у ньому лівіше: максимальна чи мінімальна.
  17. Дано натуральне число. З’ясуйте, скільки разів у ньому зустрічається максимальна цифра.

Назад Зміст Вперед