2017-01-10 4 views
1

이 기능은 숫자의 홀수로하지만 (예를 들어, 그것은 2662에 대한 사실이 아닌 906,609에 대한 반환) 숫자의 짝수 모든 번호를 번호를 작동하는 것 같군. 나는 지난 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; 
} 
+0

사면 명백한하지만이 아닌 당신이 문자열 회문 결정을위한 마찬가지로 숫자 비교로 자리를 수행 :

BTW, 당신은 단순히 숫자를 반전 한 후 원래와 비교하여 <math.h>의 필요성을 피할 수 있습니다 , 입력 매개 변수의 역 자릿수에서 제조 된 두 번째 숫자를 만들고 그 결과를 원래 값과 비교하는 것이 더 쉬울까요? – WhozCraig

+0

어떤 라이브러리를 사용하셨습니까? #include ? 컴파일 할 때 경고가 없습니까? –

+3

http://cpp.sh/9kt4를 재현 할 수 없습니다 – RyanP

답변

2

내가 재현 할 수없는,하지만 난 그게 문자열로 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

0

I을 결과를 재현 할 수 없습니다. 두 가지 테스트 케이스 모두에서 예상되는 대답을 얻습니다.

bool ispalindrome(int n) 
{ 
    int a = 0; 

    for (int r = n; r; r /= 10) 
     a = a*10 + r%10; 

    return a == n; 
}