使用不同的函数测试数字是否为回文 (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
?-73
?Zero
?)
在 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
我使用的代码是:
#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
?-73
?Zero
?)
在 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