2012-12-28 2 views
-1

온라인 회상 검색 센서를 만들려고합니다 (알파벳은 0,1,2,3, ... 9로 구성됩니다). 코드는 다음과 같습니다 :온라인 회문 표시 만들기

#include<iostream> 
#include<cmath> 
using namespace std; 

int main() 
{ 
int x=0; 
int y=0; 

int c; 
int i=0; 
while(1) 
{ 
cin>>c; 
//I keep a track of previous number in x and its reverse in y and use them to create the 
//the new number and reverse at every input. Then I compare x and y. If equal the number is 
//a palindrome. 
/*eg:(When 121 is entered digit by digit) 
    i=0:- 
    x=10*0+1 y=0+ 10^0 *1 

    i=1:- 
    x=10*1+2 y=1+ 10^1 *2 

    i=2:- 
    x=10*12+1 y=21+ 10^2 *1 
*/ 
x=10*x+c; 
y=y+ static_cast<int>(pow(10.0,static_cast<double>(i)) *c); 
cout<<"y= "<<y<<" and "<<"x= "<<x<<endl; 
if(y==x) 
cout<<"Palindrome"<<endl; 

i++; 
}  

return 0; 
} 

먼저 1을 입력하고 예상대로 (palindrome) 표시가되었습니다. 그런 다음 2를 입력했는데 아무런 반응이 없었습니다 (예상대로 'y= 21 and x= 12'이 인쇄되었습니다). 그러나, 나는 다시 한 입력과도 아무 일도없는이 시간 (을 예상하지)이 인쇄되었다

y= 120 and x= 121 

사람이 말해 줄 수 , 어떻게 y는 거죠 (120)가 121으로 가정 할 때?

+0

왜 이것을 권력으로 모으고 있습니까? – Woot4Moo

+0

@ Woot4Moo ... 그것이 작동하는 방법이기 때문에 ... 121 = 10^2 * 1 + 21 – avinash

답변

1

당신은 너무 많은 수학을하고있다 :

public static boolean isPalindrom(char[] word){ 
    int i1 = 0; 
    int i2 = word.length - 1; 
    while (i2 > i1) { 
     if (word[i1] != word[i2]) { 
      return false; 
     } 
     ++i1; 
     --i2; 
    } 
    return true; 
} 

당신이 사용자가 그들을 들어가는 값으로 배열을 기입하면된다이 유사한 함수를 호출 할 필요. 단순히 솔루션이 존재할 때 지수의 사용은 엄청난 자원 낭비입니다.

+0

@ Woot4Moo ... 나는 당신과 동의한다. 그러나 나는 내 대답에 무엇이 잘못되었는지를 물었다. 어떻게 루프 후에 y가 21에서 20으로 변경됩니까? 더 나은 이해를 위해 질문을 업데이트했습니다. – avinash

+0

@avinash 중요하지 않지만이 C 또는 C++입니까? 나는 로컬에서 프로그램을 다시 만들고 싶다 – Woot4Moo

+0

@ Woot4Moo ... 그 C++ – avinash