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)可能会溢出。