不对的原因,主要是if条件语句应该是用“==”而不是“=”,这是判断,不是赋值。其它的错误,scanf_s("%d",&a)改成scanf("%d",&a),printf用错了,printf打印应该是一个占位符对应一个要输出的内容,就是你代码中%d对应一个输出。
修改后的代码:
#include
int main()
{
int a, b, c, d, e, f, w;
printf("输入一个不多于五位的整数:");
scanf("%d",&a);
//第一问,求出它是几位数
b = 10000 - a;
c = 1000 - a;
d = 100 - a;
e = 10 - a;
f = 0 - a;
while (a < 0 || a > 99999)
printf("输入错误,请重新输入\n");
if (b < 0)
{
printf("a是五位数\n");
w = 5;
}else if (c < 0){
printf("a是四位数\n");
w = 4;
}else if (d < 0){
printf("a是三位数\n");
w = 3;
}else if (e < 0){
printf("a是两位数\n");
w = 2;
}else if (f < 0){
printf("a是个位数\n");
w = 1;
}else
printf("输入错误,请重新输入\n");
//第二问,分别输出每一位数字
if (w == 5)
printf("%d %d %d %d %d\n", a / 10000, a / 1000 % 10, a / 100 % 10, a / 10 % 10, a % 10);
if (w == 4)
printf("%d %d %d %d\n", a / 1000 % 10, a / 100 % 10, a / 10 % 10, a % 10);
if (w == 3)
printf("%d %d %d\n", a / 100 % 10, a / 10 % 10, a % 10);
if (w == 2)
printf("%d %d\n", a / 10 % 10, a % 10);
if (w == 1)
printf("%d\n", a % 10);
//第三问,按逆序输出各位数字
if (w == 5)
printf("%d %d %d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10, a / 1000 % 10, a / 10000);
if (w == 4)
printf("%d %d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10, a / 1000 % 10);
if (w == 3)
printf("%d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10);
if (w == 2)
printf("%d %d\n", a % 10, a / 10 % 10);
if (w == 1)
printf("%d\n", a % 10);
}
修正后的代码执行如下:
这样就好了,最大错误是switch语句,因为当p<5时,case 5就没意义了,就会报错。
这题要用数组做的话会很简洁,可惜你们没学到,我们也是才学C语言,讲的比较快,呵呵。
能想到这方法这的很不容易,,居然循环都没用
#include
int main()
{
int a,b,c,d,e,p,n;
scanf("%d",&n);
if (n>9999)
p=5;
else if(n>999)
p=4;
else if(n>99)
p=3;
else if(n>9)
p=2;
else p=1;
printf("位数:%d\n",p);
a=n/10000;
b=(int)(n-a*10000)/1000;
c=(int)(n-a*10000-b*1000)/100;
d=(int)(n-a*10000-b*1000-c*100)/10;
e=(int)(n-a*10000-b*1000-c*100-d*10);
printf("每一位数为:");
if(p==5)
{
printf("%d %d %d %d %d\n",a,b,c,d,e);
printf("反向数为:%d%d%d%d%d\n",e,d,c,b,a);
}
if(p==4)
{
printf("%d %d %d %d\n",b,c,d,e);
printf("反向数为:%d%d%d%d\n",e,d,c,b);
}
if(p==3)
{
printf("%d %d %d\n",c,d,e);
printf("反向数为:%d%d%d\n",e,d,c);
}
if(p==2)
{
printf("%d %d\n",d,e);
printf("反向数为:%d%d\n",e,d);
}
if(p==1)
{
printf("%d\n",e);
printf("反向数为:%d\n",e);
}
return 0;
}
/* Note:Your choice is C IDE */
#include"stdio.h"
void main()
{
int a,i,b,c,e,f,n;
scanf("%d",&n);
a=n/10000;
b=n%10000/1000;
c=n%10000%1000/100;
e=n%10000%1000%100/10;
f=n%10000%1000%100%10/1;
if(a>0)
{ printf("有五位数");printf("%d%d%d%d%d",f,e,c,b,a);}
else if(b>0)
{printf("%d%d%d%d",f,e,b,c);
printf("有四位数");}
else if(c>0)
{printf("有三位数");printf("%d%d%d",f,e,c);}
else if(e>0)
{printf("有两位数");printf("%d%d",f,e);}
else
{printf("有一位数");printf("%d",f);}
}这样才可以把各位数字分解出来,希望对你有帮助
switch 语句 没错 ,换成这样就 可以了 (还有有一种用法 ,不过 会麻烦点) , 还有就是 要对 n 作 限制
#include
int main()
{
int a,b,c,d,e,p,n;
scanf("%d",&n);
if (n < 100000 && n > 0)
{
if (n>9999);
p=5;
else if (n>999);
p=4;
else if (n>99);
p=3;
else if (n>9);
p=2;
else p=1;
printf("位数:%d\n",p);
printf("每一位数为:");
a=n/10000;
b=(int)(n-a*10000)/1000;
c=(int)(n-a*10000-b*1000)/100;
d=(int)(n-a*10000-b*1000-c*100)/10;
e=(int)(n-a*10000-b*1000-c*100-d*10);
switch(p);
{
case 5:printf("反向数为:%d%d%d%d%d",a);
case 4:printf("反向数为:%d%d%d%d",b);
case 3:printf("反向数为:%d%d%d",c);
case 2:printf("反向数为:%d%d",d);
case 1:printf("反向数为:%d",e);
break;
}
}
return 0;
}
1.
int x;//5位数
i=0;//求解
do
{x=x/10;i++}
while(x);
//i为所求
2.
int x;//5位数
do
{printf(%d,x%10);x=x/10;}
while(x);
3.上面输出的就是逆序的,先个位,再十位,。。。。