尽管逻辑正确,输出错误

问题描述:

五位数字的反转。尽管逻辑正确,输出错误

#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

有一点问题,在这里,从我可以告诉,而不是做最后一位数字的整数除法用10做一个模块或简单地打印它是

l5=m4/10; 

变化

逻辑
l5=m4%10; 

您允许使用循环吗?尝试这样的事情也许:

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