Преобразование числа в символ

#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 является an int , он навсегда остается an int .

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; }