回文测试函数
Palindrome testing function
此函数似乎适用于奇数位数的数字,但不适用于所有偶数位数的数字(例如,returns 2662 为真,906609 则不然)。在过去的 20-30 分钟里,我一直在努力解决这个问题,但我还没有找到原因。
#include <math.h>
int digits(int n)
{
return log10(n)+1;
}
bool ispalindrome(int n)
{
int c=digits(n);
for(int i=0; i<c/2; i++){
int a=pow(10,i),b=pow(10,c-i-1);
if( int(n/a) %10 != int(n/b) %10 ) return false;
}
return true;
}
#include <iostream>
#include <cstdlib>
int main(int, char**argv)
{
while (*++argv)
std::cout << *argv
<< (ispalindrome(std::atoi(*argv)) ? " is a palindrome." : " is not a palindrome.")
<< std::endl;
}
我无法重现,但我认为将 int 与字符串进行比较会更容易 == reversedString:
bool isPalindrome(const int& n)
{
std::stringstream ssN;
ssN << n;
auto numberAsString = ssN.str();
auto reversed = numberAsString;
std::reverse(numberAsString.begin(), numberAsString.end());
return numberAsString == reversed;
}
请检查代码:main.cpp
我无法重现你的结果 - 我得到了你的两个测试用例的预期答案。
顺便说一句,您可以通过简单地反转数字然后与原始数字进行比较来避免 <math.h>
的需要:
bool ispalindrome(int n)
{
int a = 0;
for (int r = n; r; r /= 10)
a = a*10 + r%10;
return a == n;
}
此函数似乎适用于奇数位数的数字,但不适用于所有偶数位数的数字(例如,returns 2662 为真,906609 则不然)。在过去的 20-30 分钟里,我一直在努力解决这个问题,但我还没有找到原因。
#include <math.h>
int digits(int n)
{
return log10(n)+1;
}
bool ispalindrome(int n)
{
int c=digits(n);
for(int i=0; i<c/2; i++){
int a=pow(10,i),b=pow(10,c-i-1);
if( int(n/a) %10 != int(n/b) %10 ) return false;
}
return true;
}
#include <iostream>
#include <cstdlib>
int main(int, char**argv)
{
while (*++argv)
std::cout << *argv
<< (ispalindrome(std::atoi(*argv)) ? " is a palindrome." : " is not a palindrome.")
<< std::endl;
}
我无法重现,但我认为将 int 与字符串进行比较会更容易 == reversedString:
bool isPalindrome(const int& n)
{
std::stringstream ssN;
ssN << n;
auto numberAsString = ssN.str();
auto reversed = numberAsString;
std::reverse(numberAsString.begin(), numberAsString.end());
return numberAsString == reversed;
}
请检查代码:main.cpp
我无法重现你的结果 - 我得到了你的两个测试用例的预期答案。
顺便说一句,您可以通过简单地反转数字然后与原始数字进行比较来避免 <math.h>
的需要:
bool ispalindrome(int n)
{
int a = 0;
for (int r = n; r; r /= 10)
a = a*10 + r%10;
return a == n;
}