2012-09-30 26 views
0

此代碼不會給我正確的答案,我找不到錯誤。我如何修復代碼?在c中找到一個數字的迴文記錄

場景:首先它確定數字的位數,然後回覆數字。

#include<stdio.h> 
#include<conio.h> 
#include<math.h> 

int main() 
{ 
    int number=42321,j=0,dig,temp; 
    long long pal= 0LL; 

    temp=number;  
    while(temp>0) 
    { 
      temp/=10; 
      j++; 
    } 

    while (number>0) 
    {   
      dig=number%10; 
      pal+=dig*(int)pow(10,j); 
      number/=10; 
      j--; 
    } 

    printf("%d",pal); 
    getch(); 
} 
+0

當你試着調試代碼發生了什麼事? –

+0

'42321'應該是什麼答案?那麼'42323' – dasblinkenlight

+1

如果你不得不要求stackoverflow這個問題的面試測試,你可能無法完成這項工作。 – geocar

回答

3

while(temp>0) 
{ 
     temp/=10; 
     j++; 
} 

你計算的位數是number了,這比十不超過number最高功率的指數多一個。之後你需要減去j

但使用pow()是不是最好的方式,更好的是逐步構建反向號碼:

while(temp > 0) 
{ 
    pal = 10*pal + temp%10; 
    temp /= 10; 
} 
2

您定義pallong long。然後你騙了編譯器,告訴它你會傳遞一個值int類型,但發送pal:類型long long

printf("%d",pal); /* WRONG */ 

的值不要那樣做。 使用適當的轉換符

printf("%lld", pal); /* preferred */ 

或值轉換爲適當的類型

printf("%d", (int)pal); /* UGH! */ 
相關問題