2014-06-12 85 views
1

我爲這個下一個迴文問題編寫了一個蠻力解決方案,並希望獲得超出時間限制。但是,當我測試了幾個測試用例,它正常工作,但是當我在spoj中提交代碼時,我得到了錯誤的答案。這是我的代碼。請有人能幫我弄清楚這個程序代碼有什麼問題。The Next Palindrome SPOJ

int main() 
    { 
     int t,k,cmp,tmp; 
     scanf("%d",&t); //No of test cases 
     while(t--) 
     { 
     scanf("%d",&k); //Enter the input 
     while(1) 
     { 
      ++k;   //Increment Every no if there is no palindrome 
      tmp=k; 
      cmp=0; 

      while(tmp%10 != 0) // Reverse a number 
      { 
      cmp=(cmp*10)+(tmp%10); 
      tmp=tmp/10; 
      } 

      if(k == cmp) // If Reverse and K are same its a palindrome . 
      { 
      printf("%d\n",k); 
      break; 
      } 
     } 
     } 
     return 0; 
    } 

這裏是鏈接的問題:http://www.spoj.com/problems/PALIN/ 您可以提交我的解決方案:http://www.spoj.com/submit/PALIN/

回答

0
while (tmp%10 != 0) // Reverse a number 
{ 
    cmp = (cmp * 10) + (tmp % 10); 
    tmp = tmp/10; 
} 

如果你的號碼中有一個0喜歡5403123 tmp%10是0,停止倒車號碼

+1

問題出在輸入。他將輸入作爲一個不能保存10位以上的int的輸入,而輸入可能長達1000000位。 –

+0

他接受輸入的方式是另一個問題,但是如果他糾正了我指出的錯誤,那麼該程序應該適用於小數字。是的,如果他將輸入存儲爲數組,他將需要另一種方法來檢查迴文,並且該程序可用於更大的數字。 –

+0

是的你是對的。我將代碼稍微改了一點,以用於測試用例。它仍然顯示錯誤的答案。 while(tmp!= 0) cmp =(cmp * 10)+(tmp%10); tmp = tmp/10; } – user3045438

0

問題說K不會超過1000000位。這意味着k可以有幾乎1000000位,你不能在int。你將不得不把輸入作爲字符並存儲在一個數組中。

char arr[1000001];

int i=0, c;

while(c = getchar() && c!='\n') { arr[i] = c; i++; }

,並進一步實現您的算法。