У цьому розділі розташовані задачі в яких з цифр одного числа отримаємо інше число. При цьому можна змінювати цифри, деякі вилучати або вставляти нові.
Згадаємо, що десяткова система числення є позиційною. В позиційній системі числення значення кожної цифри залежить від її позиції – місця у числі.
Число 4131 насправді має такий склад:
4131=4*1000+1*100+3*10+1=4*103+1*102+3*101+1*100
Число 10, степені якого використовуються у цій формулі називається основою системи числення, а степені десятки – це вага цифри.
Дано натуральне число. Припишіть 5 в початок цього числа. Наприклад, було 324, стало 5324.
| Ввід | Вивід |
|---|---|
| 324 | 5324 |
Вхідні:
Вихідні:
Проміжні:
Щоб отримати нове число m, потрібно цифру 5 помножити на її вагу у новому числі (у прикладі на 1000) та до цього добутку додати введене число n (у прикладі 5*1000+324=5324).
Задача зводиться до пошуку d ваги цифри 5 у новому числі. Для цього у циклі d умножаємо на 10, стільки разів, скільки цифр у числі. Як-то:
Тепер алгоритм докладніше:
#include <iostream>
using namespace std;
int main()
{
long int n, x, d, m; // n - вхідне число, x - копія числа, d - множник, m - результат
cin >> n; // Введення числа
x = n; // Збереження копії числа
d = 1; // Ініціалізація множника
// Обчислення множника (10 у степені кількості цифр)
do
{
d = d * 10; // Збільшення множника
n = n / 10; // Відкидання останньої цифри
} while (n > 0); // Повторювати, доки є цифри
m = 5 * d + x; // Додавання 5 на початок числа
cout << m; // Виведення результату
return 0;
}
Дано натуральне число. Змініть у ньому всі цифри 1 на 2.
| Ввід | Вивід |
|---|---|
| 4131 | 4232 |
Вхідні:
Вихідні:
Проміжні:
Скорочений алгоритм формування з введеного числа n нового числа m такий:
Щоб визначити формули, за якими будуть обчислюватись m та d складемо таблицю для нашого прикладу:
| Змінна | c | m | d | n |
|---|---|---|---|---|
| Дія | Обчислення останньої цифри | Накопичуємо цифру у початок числа | Вага цифри, степені числа 10 | Відкидаємо останню цифру |
| Початкове значення | 0 | 1 | 4131 | |
| 1 виток циклу | 1 змінюємо на 2 | 2 | 10 | 413 |
| 2 виток циклу | 3 | 32=3*10+2 | 100 | 41 |
| 3 виток циклу | 1 змінюємо на 2 | 232=2*100+32 | 1000 | 4 |
| Останній виток циклу | 4 | 4232=4*1000+232 | 10000 | 0 |
| Формули | c=n % 10 | m= c*d + m | d=d*10 | n=n / 10 |
Аналізуючи третій стовпчик таблиці можна заповнити комірку, де буде формула для обчислення нового числа m. Ясно, що для додавання цифри c у початок нового числа m потрібно умножати її на вагу d і цей добуток накопичувати у нове число m.
Формула для обчислення степенів числа 10 нам відома. Можна записати її у четвертому стовпчику.
Тепер алгоритм докладніше:
#include <iostream>
using namespace std;
int main()
{
long int n, d, m; // n - вхідне число, d - розряд множника, m - результуюче число
int c; // c - поточна цифра
cin >> n; // Введення числа
m = 0; // Ініціалізація результату
d = 1; // Початковий розряд (одиниці)
do
{
c = n % 10; // Отримання останньої цифри
if (c == 1) // Якщо цифра дорівнює 1
{
c = 2; // Замінюємо її на 2
}
m = m + c * d; // Додаємо цифру до результату з урахуванням розряду
d = d * 10; // Збільшуємо розряд (×10)
n = n / 10; // Видаляємо останню цифру
} while (n > 0); // Повторюємо, доки є цифри
cout << m; // Виведення результату
return 0;
}
Дано натуральне число n. Вилучить у ньому всі 1.
| Ввід | Вивід |
|---|---|
| 4131 | 43 |
Вхідні:
Вихідні:
Проміжні:
Алгоритм формування з введеного числа n нового числа m без 1 відрізняється від алгоритму попередньої задачі тим, що оператори, які ми назвали „формування нового числа” виконуються тільки, коли цифра, яка переноситься у нове число не 1. Якщо цифра дорівнює 1, то ці оператори не виконуються і цифра в нове число не переноситься.
Тепер алгоритм докладніше:
#include <iostream>
using namespace std;
int main()
{
long int n, d, m; // n - вхідне число, d - множник розрядів, m - результат
int c; // c - поточна цифра числа
cin >> n; // Отримання вхідного числа
m = 0; // Ініціалізація результату
d = 1; // Початковий множник розряду (1)
do
{
c = n % 10; // Отримання останньої цифри числа
if (c != 1) // Якщо цифра не дорівнює 1
{
m = m + c * d; // Додаємо цифру до результату з урахуванням розряду
d = d * 10; // Збільшуємо множник розряду
}
n = n / 10; // Видалення останньої цифри
} while (n > 0); // Повторюємо, доки є цифри
cout << m; // Виведення результату
return 0;
}
Дано натуральне число n. Переверніть число. Наприклад, з числа 3456 одержати 6543.
| Ввід | Вивід |
|---|---|
| 3456 | 6543 |
Вхідні:
Вихідні:
Проміжні:
Скорочений алгоритм формування з введеного числа n нового числа m такий:
Щоб визначити формулу, за якою буде обчислюватись m складемо таблицю для нашого прикладу:
| Змінна | c | m | n |
|---|---|---|---|
| Дія | Обчислення останньої цифри | Накопичуємо цифру у початок числа | Відкидаємо останню цифру |
| Початкове значення | 0 | 3456 | |
| 1 виток циклу | 6 | 6 | 345 |
| 2 виток циклу | 5 | 65=6*10+5 | 34 |
| 3 виток циклу | 4 | 654=65*10+4 | 3 |
| Останній виток циклу | 3 | 6543=654*10+3 | 0 |
| Формули | c=n % 10 | m= m*10+c | n=n / 10 |
Аналізуючи третій стовпчик таблиці можна заповнити комірку, де буде формула для обчислення нового числа m. Ясно що для додавання цифри c у кінець нового числа m потрібно число m умножати на 10 та додавати да нього знайдену цифру с.
Тепер алгоритм докладніше:
#include <iostream>
using namespace std;
int main()
{
long int n, m; // n - вхідне число, m - обернене число
int c; // c - поточна цифра
cin >> n; // Введення числа
m = 0; // Ініціалізація оберненого числа
do
{
c = n % 10; // Отримання останньої цифри
m = m * 10 + c; // Додаємо цифру до оберненого числа
n = n / 10; // Видаляємо останню цифру
} while (n > 0); // Повторюємо, доки є цифри
cout << m; // Виведення оберненого числа
return 0;
}
- Дано натуральне число. Змініть у ньому всі цифри a на b.
- Дано натуральне число. Вилучить з нього всі цифри a.
- Дано натуральне число. З’ясуйте, чи є воно паліндромом (перевернуте число дорівнює введеному).
- Дано натуральне число. Припишіть цифру a в початок цього числа.
- Дано натуральне число. Припишіть по двійці в початок та кінець цього числа.
- Дано натуральне число. Припишіть цифру a в початок та цифру b у кінець цього числа.
- Дано натуральне число. Вилучити з нього всі цифри, що співпадають з останньою цифрою.
- Дано натуральне число. Вилучити з нього тільки першу цифру.
- Дано натуральне число. Вилучити з нього всі входження першої цифри.
- Дано натуральне число. Припишіть до нього таке ж саме число.
- Дано натуральне число n. Припишіть у кінець цього числа число m.
- Дано натуральне число n. Припишіть до нього число m в початок та кінець цього числа.
- Дано натуральне число. Вилучити з нього всі входження мінімальної цифри.
- Дано натуральне число. Вилучити з нього максимальну цифру. Якщо максимальних цифр декілька (39892), то вилучити останню максимальну(3982).
- Дано натуральне число. Сформуйте нове число, в якому перед кожною цифрою 1 вставлена цифра 0 (наприклад, було 3141 стало 301401).
- Дано натуральне число. Переставте його першу та останню цифри.
- Дано натуральне число. Знайти кількість його різних цифр.