Реверсирование числа (C ++) - PullRequest
       12

Реверсирование числа (C ++)

0 голосов
/ 20 сентября 2018

Я новичок в C ++ и пытаюсь создать простую программу, чтобы определить, является ли введенное пользователем целое число четырьмя цифрами, и если это так, изменить порядок указанных цифр и распечатать этот вывод.

У меня есть (в основном) рабочая программа, но когда я пытаюсь, происходит одно из двух:

a) если строка 16 закомментирована и строка 17 активна, то программа печатаетбесконечное число обращенных чисел и происходит сбой IDE (в данном случае repl.it);или

b) если строка 17 закомментирована и строка 16 активна, то программа выводит одну правильную строку, но следующая строка «Ваш номер слишком короткий ... снова» (посмотрите на кодниже)

#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;

int main() {
  int n, reversedNumber, remainder;
  bool loopControl;
  char userFinalResponse;
  reversedNumber=0;

  cout<<"Input a 4 digit integer and press Return\n"<<endl;
  cin>>n;
  while (loopControl=true){
    //if ((n>9999)||(n<1000))
    if ((n>9999)||((n<1000)&&(n>0)))
    {
      cout<<"Your number is too short or too long. Please try again.\n"<<endl;
      cin>>n;
      loopControl=false;
    } else {
      while(n != 0)
      {
        remainder = n%10;
        reversedNumber=reversedNumber*10+remainder;
        n /= 10;
        loopControl=true;
      }//closing brace for reversal loop
      cout<<"Your reversed number is "<<reversedNumber<<"\n"<<endl;
    }//closing brace for else
  }//closing brace for "while (loopControl>0){"
  return 0;
}//closing brace for "int main() {"

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Согласно cpp tutorials = является оператором присваивания, а не оператором сравнения.Из-за этого ваш while цикл никогда не прекратится.Вы можете просто инициализировать loopControl в true, а затем установить его в false, когда можно выйти:

int n, reversedNumber, remainder;
bool loopControl = true;  //Initialize to true
char userFinalResponse;
reversedNumber = 0;

cout << "Input a 4 digit integer and press Return\n" << endl;
cin >> n;
while (loopControl) {
    //if ((n>9999)||(n<1000))
    if ((n>9999) || ((n<1000) && (n>0)))
    {
        cout << "Your number is too short or too long. Please try again.\n" << endl;
        cin >> n;
        loopControl = true;  //need to keep on looping
    }
    else {
        while (n > 0)
        {
            remainder = n % 10;
            reversedNumber = reversedNumber * 10 + remainder;
            n /= 10;
            loopControl = false; //Ok to exit
        }//closing brace for reversal loop
        cout << "Your reversed number is " << reversedNumber << "\n" << endl;
    }
}
0 голосов
/ 20 сентября 2018

Вы можете попробовать это:

int number = 1874 //or whatever you need
auto str = std::to_string(number);

if (str.length() == 4) {
    std::reverse(str.begin(), str.end());
    std::cout << str << std::endl;
}

Я предлагаю вам взглянуть на заголовок algorithm, который содержит множество полезных методов, которые могут помочь вам при разработке программ.

...