#c
Вопрос:
Мне нужно обратное целочисленное значение.
код
int number = 123, num1, num2, num3; num1 = number / 100; num2 = number % 100 / 10; num3 = number % 10; static_castlt;chargt;(num1, num2, num3); cout lt;lt; num3 num2 num1 lt;lt; endl;
результат-6.. (я хотел, чтобы вышло «321».)
в чем проблема с моим кодом?
Комментарии:
1. Как вы думаете, почему
num3 num2 num1
(3 2 1) не было бы 6? Кромеstatic_castlt;chargt;(num1, num2, num3);
того, использование оператора запятой почти определенно не делает то, что вы ожидаете.2.
static_cast
возвращает результат, он не изменяет аргумент. Также C статически типизирован: еслиnum1
является anint
, он навсегда остается anint
.3. Почему нет
cout lt;lt; (char)(num3 '0') lt;lt; (char)(num2 '0') ...
4. Помните все деления, которые вы делали при выделении цифр? Ты должен их отменить.
5. Преобразуйте число в строку. Распечатайте строку в обратном порядке или переверните строку, затем распечатайте строку.
Ответ №1:
Проблема:
Даже если вы преобразуете an int
в char
использование static_castlt;chargt;
, он сохранит свою ценность. Кроме того, это не тот способ, которым вы звоните static_castlt;chargt;
.
Решение:
Если вы просто хотите распечатать их своим методом, вам даже не нужно преобразовывать числа в char
. Просто распечатайте их, воспользовавшись lt;lt;
услугами оператора.
#include lt;iostreamgt; int main(){ int number = 123, num1, num2, num3; num1 = number / 100; num2 = number % 100 / 10; num3 = number % 10; std::cout lt;lt; num3 lt;lt; num2 lt;lt; num1 lt;lt; std::endl; }
Однако это будет работать только для чисел от 100 до 999.
Гораздо лучшим решением было бы преобразовать число в std::string
и изменить его std::reverse
с lt;algorithmgt;
помощью заголовка.
#include lt;iostreamgt; #include lt;algorithmgt; int main(){ int number = 123; std::string str = std::to_string(number); std::reverse(str.begin(),str.end()); std::cout lt;lt; str lt;lt; std::endl; }
Затем, если вы хотите получить обратное число в виде целого числа вместо его печати, вы можете использовать std::stoi
.
#include lt;iostreamgt; #include lt;algorithmgt; int main(){ int number = 123; std::string str = std::to_string(number); std::reverse(str.begin(),str.end()); int reversed_number = std::stoi(str); std::cout lt;lt; reversed_number lt;lt; std::endl; }
Обратите внимание, что это не сработает и вызовет исключение для отрицательных чисел из-за ведущего» -«.
Ответ №2:
Ошибся оператором ! Вместо » » : используйте «lt;
#include lt;iostreamgt; int main(int argc, char* argv []) { int number = 123, num1, num2, num3; num1 = number / 100; num2 = number % 100 / 10; num3 = number % 10; //static_castlt;chargt;(num1, num2, num3); std::cout lt;lt; num3 lt;lt; num2 lt;lt; num1 lt;lt; std::endl; }