反转数字(C ++)

时间:2018-09-19 23:56:58

标签: c++ c++14

我是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 :(得分:4)

您可以尝试以下方法:

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标头,其中包含许多可以在开发程序时为您提供帮助的有用方法。

答案 1 :(得分:0)

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