Программа на C++ для перестановки цифр числа в обратном порядке
В этой программе будем получать от пользователя число и переставлять цифры этого числа в обратном порядке.
- Начнем программу с заголовочного файла.
#include <iostream> → непрерывный поток байтов данных ввода-вывода.
using namespace std; → используется для хранения имени переменной.
int main() → возвращает функцию типа данных.
- Объявим переменную в целочисленной форме ( n, reverse = 0, rem ), ведь вводить мы будем числа (в cout statement у нас задано enter a number («ввести число»)).
Логика кода
Шаг 1. Выделение последней цифры в числе
Оператор модуля (%) возвращает остаток от деления. В этом случае мы делим число на 10 и возвращаем остаток. Рассмотрим число 1234. Разряд десятков (30) делится на 10 без остатка, разряд сотен (200) и разряд тысяч (1000) — тоже. Остаток от деления будет равен 4, а это разряд единиц, который на 10 не делится. Теперь у нас есть способ выделения последней цифры любого целого числа. Сохраняем это в переменной last digit.
Шаг 2. Добавление «last digit» к «reverse»
Теперь начинаем составлять число в обратном порядке, добавляя last digit в конец reverse. Не забывайте, что обе эти переменные целочисленные, поэтому их нельзя просто конкатенировать. Умножаем reverse на 10, так что разряд единиц становится разрядом десятков, разряд десятков становится разрядом сотен и т. д. И у нас остается новый разряд единиц, куда мы добавляем последнюю цифру (в нашем примере это 4).
Мы успешно скопировали последнюю цифру числа и добавили ее в reverse.
Шаг 3. Удаление последней цифры из числа
Обратите внимание, что число все еще 1234, хотя цифра 4 нами уже использована. Чтобы удалить эту последнюю цифру из числа, просто делим ее на 10. Она будет удалена, потому что здесь выполняется целочисленное деление, при котором результаты округляются до ближайшего целого числа (например, 244 / 10 = 24).
Шаг 4. Повторение этого процесса
Повторяем этот процесс, пока число не уменьшится до нуля и не завершится reverse.
В выводе цифры числа будут переставлены в обратном порядке, потому что в cout statement у нас задано reverse number («переставить цифры числа в обратном порядке»).
endl → очищает буфер и продолжает отображение в новой строке.
return 0 → означает, что программа выполнена успешно (цифры числа переставлены в обратном порядке).
How to reverse integers with C# .NET
Say you need to write a function that accepts and integer and returns its reverse. Here come a couple of examples:
| Input | Output |
| 4 | 4 |
| 28 | 82 |
| 9876 | 6789 |
| -4 | -4 |
| -456 | -654 |
| -1928 | -8291 |
So we’re not talking about some mathematical function, but more of a string-reverse. However, note that the negative sign must stay in place, so there’s a little bit of maths in there.
If that doesn’t sound like a problem that you would normally solve in a real life project then you’re probably right. I’m not even sure if there’s a legitimate business use-case for such a function. However, job interview tests often don’t revolve around real-life problems, at least not the initial ones that are meant to filter out candidates that are not a good fit for the position. It’s good to go through the most common problems so that you can breeze through them and have time over for the more difficult ones.
The C# solution is very easy in fact, and I’m sure it’s equally simple in other popular languages. Without any further due here’s one of the many possible solutions out there:
Let’s see how this works.
The above bit takes the incoming integer, takes its absolute value and turns it to a string. Why take the absolute value? We don’t want the ‘-‘ character to end up at the end of the string, so at this point we get rid of it. So at this point we have the following strings:
| Input | Output |
| 4 | “4” |
| 28 | “28” |
| 9876 | “9876” |
| -4 | “4” |
| -456 | “456” |
| -1928 | “1928” |
Next we call the Reverse() extension on this string. It returns an IEnumerable<char> , i.e. not the reversed string, but the constituent characters in a reversed order like here:
| Input | Output |
| 4 | [‘4’] |
| 28 | [‘8’, ‘2’] |
| 9876 | [‘6’, ‘7’, ‘8’, ‘9’] |
| -4 | [‘4’] |
| -456 | [‘6’, ‘5’, ‘4’] |
| -1928 | [‘8’, ‘2’, ‘9’, ‘1’] |
The string.Join function takes a delimiter and joins a collection into a string using that delimiter. Since the delimiter is an empty string it means that we don’t want anything in between the joined characters. This is the current state of things at this point:
| Input | Output |
| 4 | “4” |
| 28 | “82” |
| 9876 | “6789” |
| -4 | “4” |
| -456 | “654” |
| -1928 | “8291” |
The values in the Output column are assigned to the reverse variable. It seems we have lost the negative sign on the way, but that’s OK, we can still read it from the incoming start parameter. The Math library has a function called Sign which returns -1 for negative numbers, 0 for 0’s and +1 for positive numbers. So we parse the reverse variable into an integer and multiply it with the correctly signed 1. Hence we have the reversed integer as specified and we can return it.
Как развернуть число в c
БлогNot. C++: как быстро переставить в обратном порядке цифры числа?
C++: как быстро переставить в обратном порядке цифры числа?
Из серии «наивных вопросов» — быстрее ли реверсировать (переставить в обратном порядке) цифры числа арифметическим способом или с помощью stringstream, как часто делают в интернете?
Думаю, результаты теста отвечают на этот вопрос чётко:
Это в профиле Release, как более подходящем для тестирования быстродействия кода. Кстати, разница вышла куда больше, чем в Debug:
Конечно, можно избавить функции от создания объектов в стеке (внутри цикла), но это мало что изменит, разве что будет чревато проблемами в более медленном втором решении.
Также код, проверенный в консоли актуальной сборки Visual Studio 2019, показывает, как измерить время выполнения вычислительного процесса с помощью библиотеки chrono. Небольшой класс Timer запускает отсчёт времени при вызове конструктора, а при вызове метода stop возвращается значение типа double , показывающее прошедшее время в секундах.
Оба метода возвращают числа, поэтому завершающие нули, превратившись в лидирующие, будут потеряны («100» превратится в «1»).
Если нужно переставить цифры числа в обратном порядке, сохраняя лидирующие нули, можно изменить функцию reversDigits так, чтобы она возвращала вторым аргументом количество цифр в числе а потом, при необходимости, дополнить полученную строку нулями слева. Конечно, это уменьшит общее быстродействие вычислительного процесса:
Получить число в обратном порядке на C++
Пример обратного целого числа, введенного пользователем при программировании на C++. Эта проблема решается с помощью цикла while в этом примере.
Эта программа принимает целочисленный ввод от пользователя и сохраняет его в переменной n .
Затем цикл while повторяется до тех пор, пока n! = 0 не станет ложным.
На каждой итерации вычисляется остаток от деления значения n на 10, вычисляется reversedNumber и значение n уменьшается в 10 раз.