用C语言编程:给一个不多于5位的正整数,要求如下:

1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123

#include<stdio.h>

int main()
{
int a, b, c, d, e, f, w;
printf("输入一个不多于五位的整数:");
scanf_s("%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 %d\n", a / 1000 % 10, a / 100 % 10, a / 10 % 10, a % 10);
if (w = 3)
printf("%d %d %d %d %d\n", a / 100 % 10, a / 10 % 10, a % 10);
if (w = 2)
printf("%d %d %d %d %d\n", a / 10 % 10, a % 10);
if (w = 1)
printf("%d %d %d %d %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 %d\n", a % 10, a / 10 % 10, a / 100 % 10, a / 1000 % 10);
if (w = 3)
printf("%d %d %d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10);
if (w = 2)
printf("%d %d %d %d %d\n", a % 10, a / 10 % 10);
if (w = 1)
printf("%d %d %d %d %d\n", a % 10);
}
为什么不对啊?

不对的原因,主要是if条件语句应该是用“==”而不是“=”,这是判断,不是赋值。其它的错误,scanf_s("%d",&a)改成scanf("%d",&a),printf用错了,printf打印应该是一个占位符对应一个要输出的内容,就是你代码中%d对应一个输出。

修改后的代码:

#include<stdio.h>

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);

}

修正后的代码执行如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-30
#include<stdio.h>
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;
}

本回答被提问者采纳
第2个回答  2019-08-05
#include<stdio.h>
#include<math.h>
int main()
{
int n,m,i=1,x;
printf("enter n:");
scanf("%d",&n);
m=n;
x=n;
if(n>99999 || n<=0)
printf("请输入一个不多于5位数的正整数\n");
while(n>=10)
{
i++;
n=n/10;
}
printf("这是一个%d位数\n",i);
int a,b,c;
printf("按顺序分别输出:");
a=pow(10,(i-1));
b=a*10;
while(a>=1)
{
c=(x%b-x%a)/a;
printf(" %d ",c);
a=a/10;
b=b/10;
}
printf("\n");
printf("按逆序输出:");
while(m!=0)
{
printf("%d",m%10);
m/=10;
}
return 0;
}
第3个回答  2019-04-09

第4个回答  2018-10-06
无法跳出while循环
相似回答