帮我看看这个C程序思想上哪里有错啊

来源:百度知道 编辑:UC知道 时间:2024/07/01 08:14:53
题目是给一个不多于5位的正整数,求出它是几位数,分别输出每一位数字,按逆序输出给位数字
#include<stdio.h>
#include<math.h>
void main()
{
long int x;
int y,a,b,c,d,e;
scanf("%ld",&x);
if(1<=x<10)
{
y=1,a=x,b=0,c=0,d=0,e=0;
}
else if(10<=x<100)
{
y=2,b=(int)(x/10),a=x-10*a,c=0,d=0,e=0;
}
else if(100<=x<1000)
{
y=3,c=(int)(x/100),b=(int)((x-100*a)/10),a=x-100*a-10*b,d=0,e=0;
}
else if(1000<=x<10000)
{
y=4,d=(int)(x/1000),c=(int)((x-1000*a)/100),b=(int)((x-1000*a-100*b)/10),a=(int)(x-1000*a-100*b-10*c),e=0;
}
else if(10000<=x<100000)
{
y=5,e=(int)(x/1000),d=(int)((x-10000*a)/1000),c=(int)((x-10000*a-1000*b)/100),b=(int)((x-10000*a-1000*b)/10),a=(int)(x-10000*a-1000*b-100*c-10*d);
}
printf("%d\n",y);
printf("%d,%d,%d,%d,%d\n",e,d,c,b,a);
printf("%d%d%d%d%d\n",a,b,c,d,e);
}
只有输入一位数的时候

if(1<=x<10)
这个得用if(x>=1 && x < 10)
下面的几个判断类似

这样做太笨了点,用循环做
而且你那个条件表达式里面,C语言里根本都没有<=这样的运算符啊

可以这样做
main()
{
long int x;
int b,i,s[5];
printf("请输入一个整数:");
scanf("%ld",&x);

for(i=0;x!=0;i++)
{
s[i]=x%10;
x=x/10;
}

//重新组成一个新的数,即将原来的各位倒过来再放回x
for(i--,b=1;i>=0;i--)
{
x=x+s[i]*b;
b=b*10;
}
printf("倒过来的数为:%ld",x);
}