使用不同的函数测试数字是否为回文 (C++)

Testing if a number is a Palindrome using different functions (C++)

我使用的代码是:

#include <iostream>
using namespace std;


int reverse (int number){
  int t = number, m = 0;
    do
    {
        m = m*10 + t%10;
    } while(t /= 10);

    return m == number;
}

bool isPalindrom(int number){
    bool Palindrom = reverse(number);
  if(Palindrom == true){
   return true;   
  } else { 
   return false;   
  }
    return 0; 
}

int main()
{
  int number;
  cout << "Please input a number " << endl;
  cin >> number;

  if(isPalindrom){
   cout << "This is a Palindrom" << endl;   
  } else {
    cout << "This is not a Palindrom" << endl;   
  }

}

我遇到的问题是 isPalindrom 始终评估为真。我相信这是因为我试图错误地设置它。该程序要求我们使用两个函数 bool isPalindrom(int number) 和 int reverse(int number)。我只是在学习使用 C++ 中的函数,所以我不确定我应该做什么。我是否应该反转 return 数字翻转自身 (m) 然后在回文中将数字与 m 进行比较,如果它的计算结果为真,它将 return 为真。然后在主检查中使用 if 语句查看 isPalindrom 是否为 true/false.

您没有正确调用函数。

 if(isPalindrom){
    cout << "This is a Palindrom" << endl;   
 } else {
    cout << "This is not a Palindrom" << endl;   
 }

要调用它,您必须提供这样的参数

if (isPalindrom(number)) {
    ....

在你的代码中 isPlanindrom 是(我相信,但实际上我在这一点上是否正确并不重要)一个函数指针,因为它处于 if 它被转换为 bool 的条件,这总是 true

PS: 我刚刚发现我写答案的速度太快了。我只看到了这个问题,并没有看其余的代码。似乎您需要了解非常基础的知识,这些知识在此处的答案中涵盖太多了。我的建议:买本书和 rtfm :P

简答:您忘记呼叫isPalindrom

长答案:isPalindom 衰减为非空函数指针,并且非空指针测试为真,您总是会看到 if 分支。


另外:

  • 是的,根据名称和 return 类型判断,reverse 旨在 return 数字的反转。
  • 相应地,isPalindom 的工作就是进行实际比较。

此外,在大多数情况下,

if (boolean) { return true; }
else { return false; }

应替换为

return boolean;

最后,您确实应该测试 cin 是否成功以及您的输入是否有效。 (例如,是否允许用户输入 0-73Zero?)

main 中,您正在评估一个名为 isPalindrom 的函数是否存在;您实际上并没有调用该函数。 if(isPalindrom){ 应该变成 if(isPalindrom(number)){.

您忘记调用 isPalindrom 时带参数。这是修复:

#include <iostream>
using namespace std;

bool reverse (int number){
    int t = number, m = 0;
    do
    {
        m = m*10 + t%10;
    } while(t /= 10);

    return m == number;
}

bool isPalindrom(int number){
    return reverse(number);
}

int main()
{
  int number;
  cout << "Please input a number " << endl;
  cin >> number;

  if(isPalindrom(number)){
   cout << "This is a Palindrom" << endl;   
  } else {
    cout << "This is not a Palindrom" << endl;   
  }
}

我还:

  • 将您的 isPalindrom() 函数简化为一个简单的 return 语句;
  • reverse 的 return 从 int 设置为 bool

你可以试试LiveDemo