【问题标题】:Reversing a number (C++)反转数字 (C++)
【发布时间】:2018-09-19 23:56:58
【问题描述】:

我是 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() {"

【问题讨论】:

  • 只需使用 std::to_string() 将数字转换为字符串,检查长度,调用 reverse 即可完成!
  • while (loopControl=true){ 此条件始终为真,循环永远不会终止。检查您最喜欢的 C++ 参考,了解赋值 = 和相等比较 == 之间的区别。除了使用n == 0 的第一次运行之外的所有迭代,这就是n&gt;0 检查产生影响的原因。
  • 或者更好的是,使用一个编译器,如果你使用了=,而你的意思可能是==,它会发出警告。
  • 确保您以足够高的警告级别进行编译,并且您会收到类似“警告:建议在赋值周围使用括号作为真值 [-Wparentheses] while (loopControl=true){”的编译警告。我将-Wall -Wextra -pedantic 用于 gcc/clang。不确定你会在 MSVC 上使用什么。

标签: c++ c++14


【解决方案1】:

你可以试试这个:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      相关资源
      最近更新 更多