Задача: Дано натуральное число. Определить: а) количество цифр в нем; б) сумму его цифр; в) произведение его цифр; г) среднее арифметическое его цифр; д) сумму квадратов его цифр; е) сумму кубов его цифр; ж) его первую цифру; з) сумму его первой и последней цифр.
Для решения этой лабораторной работы нам потребуются знания по основным арифметическим операциям в C#, математическим операциям с использованием статического класса Math
, работе со строками, а также по конвертации типов C#, например, с использованием класса Convert
.
Анализ задачи
Посмотрите на задачи, которые необходимо решить. Все они касаются, по сути, одного типа операций — работе с цифрами числа. Например, задача «определить количество цифр». Возьмем число 19951
. Число состоит из пяти цифр. Теперь посчитаем сумму цифр: 1 + 9 + 9 + 5 + 1 = 25
. Аналогичным образом, зная все цифры числа, мы можем решить и другие задачи лабораторной работы.
Как легче всего получить каждую цифру числа? Конвертировать число в строку. А так как строка — это последовательность символов, то и работать со строкой мы сможем, используя, например, циклы.
Алгоритм решения
Таким образом, исходя из анализа задачи, мы можем составить следующий алгоритм решения лабораторной работы:
- Запрашиваем у пользователя число
- Считываем ввод пользователя.
- Пытаемся конвертировать строку, введенную пользователем, в число.
- Если пользователь ввел не число, то выводим сообщение об ошибке и заканчиваем работу
- Выводим решение задачи по пунктам а), ж) и з)
- Запускаем любой цикл по символам строки и на каждой итерации цикла считаем задачи с б) по ж)
Реализуем этот алгоритм на практике.
Решение лабораторной работы (исходный код)
Ниже представлен исходный код C# с решением лабораторной работы:
Console.WriteLine("Введите любое целое число"); Console.Write("N = "); string n = Console.ReadLine(); if (int.TryParse(n, out int number) == false) { Console.WriteLine("Вы ввели не целое число!"); } else { Console.WriteLine($"Количество цифр {n.Length}"); //n.Length - выводит длину строки (колчество цифр) Console.WriteLine($"Первая цифра числа {n[0]}"); //n[0] - первый символ в строке (первая цифра) //Convert.ToInt32(n[0]) - конвертируем первый символ в целое число //Convert.ToInt32(n[n.Length-1]) - первый символ строки имеет индекс 0, последний - Length-1. Конвертируем последний символ строки в число if (n.Length == 1) { int data = Convert.ToInt32(n[0].ToString()); Console.WriteLine($"Сумма первой и последней цифры {data}"); Console.WriteLine($"Среднее арифметическое цифр {data}"); Console.WriteLine($"Произведение цифр {data}"); Console.WriteLine($"Сумма квадратов {data * data}"); Console.WriteLine($"Сумма кубов {data * data * data}"); } else { int firstLastSum = Convert.ToInt32(n[0].ToString()) + Convert.ToInt32(n[n.Length - 1].ToString()); Console.WriteLine($"Сумма первой и последней цифры {firstLastSum}"); //перебираем все символы строки int sum = 0; //сумма цифр int productOfNumbers = 1; //произведение цифр double sumOfSquares = 0; //сумма квадратов double sumOfCubes = 0;//сумма кубов foreach (char c in n) { int data = Convert.ToInt32(c.ToString()); //б) сумму его цифр; sum += data; //в) произведение его цифр; productOfNumbers *= data; //д) сумму квадратов его цифр; sumOfSquares += Math.Pow(data, 2); //е) сумму кубов его цифр; sumOfCubes += Math.Pow(data, 3); } //г) среднее арифметическое его цифр; Console.WriteLine($"Среднее арифметическое цифр {sum / n.Length}"); Console.WriteLine($"Произведение цифр {productOfNumbers}"); Console.WriteLine($"Сумма квадратов {sumOfSquares}"); Console.WriteLine($"Сумма кубов {sumOfCubes}"); } }
Стоит обратить внимание на следующий фрагмент кода:
if (n.Length == 1) { int data = Convert.ToInt32(n[0].ToString()); Console.WriteLine($"Сумма первой и последней цифры {data}"); Console.WriteLine($"Среднее арифметическое цифр {data}"); Console.WriteLine($"Произведение цифр {data}"); Console.WriteLine($"Сумма квадратов {data * data}"); Console.WriteLine($"Сумма кубов {data * data * data}"); }
Дело в том, что пользователь может ввести число, состоящее из одной цифры и тогда, если не добавить этот фрагмент кода, то, например, для числа 5 наша программа выдаст сумму цифр — 10 (первый и последний символы в строке будут одни и те же), что неправильно.
Также обратите внимание на то, как символ (char
) конвертируется в целое число:
int data = Convert.ToInt32(c.ToString());
вначале мы получаем строку (string
)
c.ToString()
и только затем получаем из строки число:
int data = Convert.ToInt32(c.ToString());
если не произвести первого преобразования из char
в string
, то метод Convert.ToInt32()
будет возвращать нам код символа и, например, для числа 1 мы получим сумму цифр не 1, как это должно быть, а 49 (код символа 1).
Проверим работу нашего приложения:
N = 1
Количество цифр 1
Первая цифра числа 1
Сумма первой и последней цифры 1
Среднее арифметическое цифр 1
Произведение цифр 1
Сумма квадратов 1
Сумма кубов 1
или так:
N = 123
Количество цифр 3
Первая цифра числа 1
Сумма первой и последней цифры 4
Среднее арифметическое цифр 2
Произведение цифр 6
Сумма квадратов 14
Сумма кубов 36
Итого
В этой лабораторной работе мы научились конвертировать типы данных C# (из char
в string
, из string
в int
) и работать со строками символов как с последовательностями — рассчитывать сумму цифр числа, произведение цифр и т.д.