2014-09-04 5 views
-1

문제 4 - 프로젝트 오일러를 풀려고 노력 중입니다. 그래서 내 코드에 약간의 도움이 필요하다. 여기에 내가 풀려고하는 문제가있다 :Palindrom checker, wrong output

회문수는 같은 두 가지 방법으로 읽는다. 두 자리 숫자 두 개로 이루어진 가장 큰 회상색은 9009 = 91 × 99입니다.

세 자리 숫자 두 자리의 곱으로 만들어진 가장 큰 palindrome을 찾습니다.

코드 :

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int is_palindrom(int number, int revrse) { 
    char str1[6]; 
    char str2[6]; 

    sprintf(str1, "%d", number); 
    sprintf(str2, "%d", revrse); 

    return strcmp(str1, str2); 
} 

int main(void) { 
    int number, revrse; 
    int i, j, temp; 
    int maks; 

    for(i=999;i>99;i--) 
     for(j=999;j>99;j--) { 
      temp = number = i*j; 
      while (temp != 0) { 
       revrse = revrse * 10; 
       revrse = revrse + temp%10; 
       temp = temp/10; 
      } 
      if(is_palindrom(number, revrse)==0 && number > maks) 
       maks = number; 
     } 
    printf("%d",maks); 
    return 0; 
} 
+0

특정 문제를 명확히하거나 추가 정보를 추가하여 필요한 것을 정확하게 강조하십시오. 현재 작성된 내용이므로 귀하가 원하는 내용을 정확하게 말하기는 어렵습니다. 이 질문을 명확히하기위한 [How to Ask] (http://stackoverflow.com/help/how-to-ask) 페이지를 참조하십시오. – usr2564301

+0

'char str1 [7]; char str2 [7];'...'int maks = 0;'...'revrse = 0; while (temp! = 0) 나는 왜 그것이 제대로 작동하지 않는지 혼란스러워서, 나는 intial을 간과했다. 그 2 ints. – BLUEPIXY

답변

1

숫자의 반대 형식을 올바르게 얻으려면 먼저 루프의 반복마다 revrse의 초기 값을 0으로 설정해야합니다. 그렇지 않으면 동작이 정의되지 않습니다. 또한 비교할 초기 값을 maks으로 설정하는 데 도움이됩니다. 마지막으로, 숫자와 역의 평등을 확인할 수있을 때 함수를 사용하여 문장을 확인하는 이유는 무엇입니까?

int main() 
{ 
    int number; 
    int i,j,temp; 
    int maks = -1; 
    int revrse; 

    for(i=999;i>99;i--) { 
     for(j=999;j>99;j--) { 
      number = i*j; 
      revrse = 0; 
      temp=number; 
      while (temp != 0){ 
       revrse = revrse * 10; 
       revrse = revrse + temp%10; 
       temp = temp/10; 
      } 
      if(number == revrse) { 
       if(number > maks) { 
        maks = number; 
       } 
      } 
     } 
    } 
    printf("%d",maks); 
    return 0; 
} 
+0

도와 주셔서 감사합니다. – korxz

5

revrse VAR는 그 안에 쓰레기가 있도록 초기화되지 않았습니다. 항상 변수를 초기화하는 것을 잊지 마십시오! while 루프가 시작되기 전에 @kleszcz에서 답을 보완

2

, revrse 항상 (그는 지능적으로 지적, 첫 번째 반복과 쓰레기) 그렇지 않으면 이전 값을 보유 할 초기화해야합니다.

또 다른 문제는 is_palindrome 기능이 필요 없다는 것입니다. 숫자가 같은지 직접 확인할 수 있습니다.