2017-08-30 115 views
-2

五位數字的反轉。儘管邏輯正確,輸出錯誤

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

int main() 
{ 
    int a, l1, l2, l3, l4, l5, m1, m2, m3, m4; 
    clrscr(); 

    printf("Enter a number: "); 
    scanf("%d",&a); 

    l1 = a % 10; 
    m1 = a/10; 
    l2 = m1 % 10; 
    m2 = m1/10; 
    l3 = m2 % 10; 
    m3 = m2/10; 
    l4 = m3 % 10; 
    m4 = m3/10; 
    l5 = m4/10; 

    printf("\n%d%d%d%d%d", l1, l2, l3, l4, l5); 
    getch(); 
    return 0; 
} 

我認爲邏輯是正確的,但輸出只有到來的輸入12345,並給予負數其他輸出。

+1

那麼,如果答案錯了,那麼邏輯也一定是錯誤的。你有沒有做過任何調試? – Carcigenicate

+0

嘗試使用gdb來調試你的程序,並btw conio.h?你使用哪個編譯器? – LethalProgrammer

+0

如果您只是將數字作爲字符串讀取,並按相反順序打印出字符,則更容易做到。 – FredK

回答

0

有一點問題,在這裏,從我可以告訴,而不是做最後一位數字的整數除法用10做一個模塊或簡單地打印它是

l5=m4/10; 

變化

邏輯
l5=m4%10; 
0

您允許使用循環嗎?嘗試這樣的事情也許:

int main() 
{ 
    int nb; 
    int res = 0; 
    int if_negative = 1; 

    printf ("%s\n", "Enter number: "); 
    scanf ("%d", nb); 
    if (nb < 0)    //check if negative 
    { 
     if_negative = -1; 
     nb *= -1; 
    } 
    while (nb != 0) 
    { 
     res = res * 10 + (nb % 10); //build up the answer 
     nb /= 10; 
    } 
    res *= if_negative; 
    **** // the rest of your code 
} 
+1

不,我們不應該使用循環 – Shraddha

+3

@Shraddha:如果您的解決方案上存在人爲約束,如「無法使用循環」或「無法使用在特定頭文件中聲明的函數」,則必須**在問題中這樣說。我們無法猜測(也不應該猜測)善意教師對代碼施加的特殊限制。循環是處理這個問題的一種自然方式。 –

+0

循環的想法很好。注意'nb * = -1;'('nb'的最小值是什麼?)和'res * 10 +(nb%10);'(可能是1222333999)可能會溢出。 – chux