【发布时间】:2013-09-29 05:16:00
【问题描述】:
第一次发帖!这是我学习“高级 C 和 C++”的第二个学期,因此非常感谢任何帮助。我已经搜索了尽可能多的 stackoverflow 和其他一些资源,试图帮助我理解我正在使用这些逻辑上无能的代码做什么(或不做什么)。
该程序的目标是识别用户给出的“数字”是否是回文。听起来很简单吧?!呃......这就是我一直坚持的:
#include <iostream>
using std::cout;
using std::cin;
#include <string>
using std::string;
#include <cstdlib>
int main()
{
//variable declarations
string buffer;
//user input
cout << "Enter a number to see if it is a palindrome[Q to quit]: ";
getline(cin, buffer);
//looooop
while(buffer != "Q" && buffer !="q")
{
int userNum, length, sum = 0, temp;
userNum = atoi(buffer.c_str());
for(temp = userNum; userNum !=0; userNum=userNum/10)
{
length = userNum % 10;
sum = sum*10+length;
}
if(temp==sum)
cout << temp << " is a palindrome!!\n\n";
else
cout << buffer << " is NOT a palindrome!\n\n";
cout << "Enter a number to see if it is a palindrome[Q to quit]: ";
getline(cin, buffer);
}
}
当输入“010”或“400”时出现问题。在这种情况下,“400”本质上是“00400”,两者都应该被视为回文。
【问题讨论】:
-
您为什么不将其作为
string或char数组呢?这样会更通用,并且会起作用。正如您所指出的,00400等同于400,因此您可以永远确定它是/不是回文。如果你想确定它是一个数字,那么做一个检查,但保持一个字符串表示,并使用一个循环遍历字符串的整数一半(奇数长度,中间字符无关)进行比较,比较相反的字符方式。 -
"010"不是数字。这是一个字符序列。对于这个问题,这是一件好事。数字不能是回文,尽管它们的文本表示可以。 -
教授还没有“教”我们使用数组,所以全班必须找到一种替代方法来处理它。
标签: c++ palindrome