Цикл While. Блок 3. Анализ цифр числа.
Задача A. Сумма цифр числа
Дано натуральное число N. Напишите функцию int SumOfDigits (int n), вычисляющую сумму цифр числа N.
- int SumOfDigits (int n)
- {
- int sum = 0;
- while (n)
- {
- sum += n % 10;
- n /= 10;
- }
- return sum;
- }
* This source code was highlighted with Source Code Highlighter.
Задача B. Количество нулей
Дано натуральное число N. Напишите функцию int NumberOfZeroes(int n), определяющую количество нулей среди всех цифр числа N.
- int NumberOfZeroes(int n)
- {
- int count = 0;
- while (n)
- {
- if (n % 10 == 0)
- count++;
- n /= 10;
- }
- return count;
- }
* This source code was highlighted with Source Code Highlighter.
Задача C. Минимальная и максимальная цифры
Дано натуральное число N. Напишите функцию int MinDigit (int n) и int MaxDigit (int n), определяющие наименьшую и наибольшую цифры данного числа.
Необходимо вывести наименьшую и наибольшую цифры данного числа через пробел.
- int MinDigit (int n)
- {
- int cur;
- int min_n = 9;
- while (n)
- {
- cur = n % 10;
- min_n = min(min_n,cur);
- n /= 10;
- }
- return min_n;
- }
- int MaxDigit (int n)
- {
- int cur;
- int max_n = 0;
- while (n)
- {
- cur = n % 10;
- max_n = max(max_n,cur);
- n /= 10;
- }
- return max_n;
- }
* This source code was highlighted with Source Code Highlighter.
Задача D. Двоичная запись
Дано натуральное число N. Выведите его представление в двоичном виде в обратном порядке.
- int n;
- cin >> n;
-
- while (n)
- {
- cout << n % 2;
- n >>= 1;
- }
- cout << n;
* This source code was highlighted with Source Code Highlighter.
Задача E. Обращение числа
Напишите функцию int reverse(int n), которая переставляет цифры числа в обратном порядке .
Вариант 1. Если перевернутое число не требуется оформлять как отдельную переменную, то можно, просто откусывая последние цифры исходного числа, выписывать их в строку вывода .
- int reverse(int n)
- {
- do
- {
- cout << n % 10;
- n /= 10;
- }
- while (n);
- return 0;
- }
* This source code was highlighted with Source Code Highlighter.
Вариант 2. Но можно и завести отдельную переменную под перевертыш, тогда появится возможность при необходимости использовать результат в дальнейшем.
- int reverse(int n)
- {
- int rev = 0;
- do
- {
- rev = rev * 10 + n % 10;
- n /= 10;
- }
- while (n);
- return rev;
- }
* This source code was highlighted with Source Code Highlighter.
Задача F. Количество палиндромов
Назовем число палиндромом, если оно не меняется при перестановке его цифр в обратном порядке. Напишите функцию bool IsPalindrome (int n), проверяющую по данному числу n, является ли оно палиндромом.
Напишите программу, которая по заданному числу K выводит количество натуральных палиндромов, не превосходящих K.
- bool IsPalindrome (int cur)
- {
- int base = cur;
- int rev = 0;
- while (cur)
- {
- rev = rev * 10 + cur % 10;
- cur /= 10;
- }
- if (base == rev)
- return true;
- else
- return false;
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
-
- int n;
- cin >> n;
- int cur = 1, count = 0;
-
- while (cur <= n)
- {
- if (IsPalindrome (cur))
- count++;
- cur++;
- }
- cout << count;
* This source code was highlighted with Source Code Highlighter.
Спасибо! Помогло разобраться.
ОтветитьУдалить