C 尽管逻辑正确,输出结果还是错误的

C 尽管逻辑正确,输出结果还是错误的,c,reverse,C,Reverse,五位数的倒数 #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 =

五位数的倒数

#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;
}
#包括
#包括
int main()
{
INTA、l1、l2、l3、l4、l5、m1、m2、m3、m4;
clrsc();
printf(“输入一个数字:”);
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();
返回0;
}

我认为逻辑是正确的,但输出只针对输入12345,并为其他输出提供负数。

据我所知,这里的逻辑有一点问题,而不是对最后一位数字进行整数除法,即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
}
int main()
{
int nb;
int res=0;
如果_负=1,则为int;
printf(“%s\n”,“输入编号:”);
scanf(“%d”,nb);
if(nb<0)//检查是否为负
{
如果_为负=-1;
nb*=-1;
}
while(nb!=0)
{
res=res*10+(注意%10);//建立答案
nb/=10;
}
res*=如果为负;
****//剩下的代码
}

如果答案是错误的,那么逻辑也必然是错误的。你做过任何调试吗?试着用gdb调试你的程序,顺便说一下conio.h?您使用的是哪种编译器?如果您只是将数字作为字符串读取,然后以相反的顺序打印出字符,那么就容易多了。如果用户给出4位数字或6位数字,该怎么办?或者你不是必须让你的程序万无一失吗?“为其他输出提供负数。”-->post该输入和观察到的输出。不,我们不应该使用loops@Shraddha:如果您的解决方案上存在人为约束,如“无法使用循环”或“无法使用特定标题中声明的函数”,你必须在问题中这样说。我们不能猜测(也不应该猜测)善意的老师对代码有什么特殊的限制。循环是处理问题的自然方式。循环的想法很好。注意
nb*=-1(nb的最小值是多少?)和res*10+(nb%10)(可能是1222333999)可能会溢出。