c语言 给一个不多于5位的正整数 用C语言写出

要求 1求出是几位数 2 分别输出每一位数字,3按逆序输出
例如 123 是3位数,分别是1,2,3 逆序是321!
#include <stdio.h>
void main()
{
long i,a,b,c,d,e;
scanf("%ld",&i);
if(1<=i&&i<10)
printf("1位数,%ld,%ld\n",i,i);
{
if(10<=i&&i<100)
{
a=i/10;
b=i%10;
printf("2位数,%ld,%ld,%ld%ld\n",a,b,b,a);
}
if(100<=i&&i<1000)
{
a=i/100;
b=i/10-i/100*10;
c=i%10;
printf("3位数,%ld,%ld,%ld,%ld%ld%ld\n",a,b,c,c,b,a);
}
if(1000<=i&&i<10000)
{
a=i/1000;
b=i/100-i/1000*10;
c=i/10-i/100*10;
d=i%10;
printf("4位数,%ld,%ld,%ld,%ld,%ld%ld%ld%ld\n",a,b,c,d,d,c,b,a);
}
if(10000<=i&&i<100000)
{
a=i/10000;
b=i/1000-i/10000*10;
c=i/100-i/1000*10;
d=i/10-i/100*10;
e=i%10;
printf("5位数,%ld,%ld,%ld,%ld,%ld,%ld%ld%ld%ld%ld\n",a,b,c,d,e,e,d,c,b,a);
}
}
}
请问我这样写可以么?还有什么更好的方式,不要用循环!我只学到5张内容!!

第一种方法代码:

#include <stdio.h> 

#include <math.h> 

int main() 

{  

int a,b,c,d;
int count = 1;
printf("请输入一个不多于5位的正整数:");  

scanf("%d",&a);
c = a; 

printf("逆序:\n"); 

while(c / 10 != 0) 

count++;

b = c % 10; 

printf("%d\n",b); 

c = c / 10;

}

b = c % 10; 

printf("%d\n",b); 

printf("位数是:%d\n",count); 

printf("顺序:\n"); 

while(a % 10 != 0)  

{  

d = a / (int)pow(10,(count-1));  

printf("%d\n",d); 

a = a % (int)pow(10,count-1); 

count--; 

}  

return 0; 

}

扩展资料:

输入一个不多于5位的正整数,编程实现以下功能:

(1)判断它是几位数

(2)分别打印每一位数字

(3)按逆序输出各位数字

(4)例如:输入2345

(5)则输出:2 3 4 5

5 4 3 2

编程思路:

首先用if语句判断输入的数是几位数,然后分别求出每位上的数字并打印,最后将求出来的每位上的数字反序输出。

程序相关知识点:

选择结构中的if语句、switch语句,循环结构中的while语句、for语句。

温馨提示:内容为网友见解,仅供参考
第1个回答  2021-03-05

先上图

程序运行截图


代码如下:

#include <stdio.h>

main(){

int a,i=1,s; //a用来接收,i用来记录位,s用来计算 

scanf("%d",&a); 

s = a;  //将a赋值给s,因为下一次运行还需要a的值 

while((s/=10)>0) i++;   //计算位的关键一步 

printf("a的位数为:%d\n",i);


 

s = a; //s的值发生变化,重新赋值 

int w = 1;

while(i-->1) w*=10; //这一步也可以用函数pow来实现 

printf("数字%d的每一位分别为:\n",a);

do

printf("%d\n",s/w);

while((s%=w)>0,w/=10);



printf("将%d倒序输出为:",a);

while(a>0){

s = a %10;

a /= 10;

printf("%d",s);

}

return 0;

}

第2个回答  2020-06-09
LZ这个程序老长了,首先判断位数和分离数字可以用for循环解决(依次除10取余数,除一次i++,输出i就是位数,用if判断结束取余数),逆序输出的时候
定义一个数组把分离的数字放在数组里,然后for循环逆序输出就行了,个人见解
仅供参考
第3个回答  2012-10-19
#include<stdio.h>
#include<math.h>
void main()
{
long int num;
int a,b,c,d,e,place;
printf("please input a number(0--99999):%d\n",num);
scanf("%ld",&num);
if(num>=10000)
place=5;
else if(num>=1000)
place=4;
else if(num>=100)
place=3;
else if(num>=10)
place=2;
else
place=1;
printf("输入数的位数是:%d\n",place);
printf("每位数字为:");
e=num/10000;
d=(int)(num-e*10000)/1000;
c=(int)(num-e*10000-d*1000)/100;
b=(int)(num-e*10000-d*1000-c*100)/10;
a=(int)(num-e*10000-d*1000-c*100-b*10);
switch(place)
{
case 5:printf("%d,%d,%d,%d,%d\n",e,d,c,b,a);
printf("\n反序数字为:%d%d%d%d%d\n",a,b,c,d,e);break;
case 4:printf("%d,%d,%d,%d",d,c,b,a);
printf("\n反序数字为:%d%d%d%d\n",a,b,c,d);break;
case 3:printf("%d,%d,%d",c,b,a);
printf("\n反序数字为:%d%d%d\n",a,b,c);break;
case 2:printf("%d,%d",b,a);
printf("\n反序数字为:%d%d\n",a,b);break;
case 1:printf("%d",a);
printf("\n反序数字为:%d\n",a);break;
}
}
第4个回答  2020-02-03
应该没有关系吧,如果是三位数,就不会输出b了。我也是初学者。
switch语句中每种case都要加花括号吧
case
1:
{printf("%d,%d,%d,%d,%d",a,b,c,d,e);
printf("\n反序数字为:");
printf("%d,%d,%d,%d,%d",e,d,c,b,a);
break;}

c语言 给一个不多于5位的正整数 用C语言写出
不对的原因,主要是if条件语句应该是用“==”而不是“=”,这是判断,不是赋值。其它的错误,scanf_s("%d",&a)改成scanf("%d",&a),printf用错了,printf打印应该是一个占位符对应一个要输出的内容,就是你代码中%d对应一个输出。修改后的代码:include<stdio.h> int main(){ int a, b...

c语言 给一个不多于5位的正整数 用C语言写出
{ int a,b,c,d;int count = 1;printf("请输入一个不多于5位的正整数:");scanf("%d",&a);c = a;printf("逆序:\\n");while(c \/ 10 != 0){ count++;b = c % 10;printf("%d\\n",b);c = c \/ 10;} b = c % 10;printf("%d\\n",b);printf("位数是:%d\\n",count...

c语言编程:给一个不多于五位的正整数,用if-else语句求出它是几位数
void main(){ int num; printf("请输入一个不大于5位数的正整数:");scanf("%d",&num);if(num>99999||num<1)printf("您的输入有误!\\n");else { if(num<10)printf("您输入的是1位数!\\n");else if(num<100)printf("您输入的是2位数!\\n");else if(num<1000)printf("您输入的...

c语言编程:给一个不多于5位的正整数,要求(1)求出它是几位数(2)分别输 ...
i,a[5];printf ("输入一个不多于5位正整数(0~99999):\\n");scanf("%d",&n);if (n<=0 || n>=100000){printf ("输入的数不合法\\n");}else{while(1){a[count]=n%10;n=n\/10;if(n==0){break;}count++;}printf("位数:%d\\n正序:",...

C语言编程:给一个不多于5位的正整数,
不多于五位的正整数,包括一位数到五位数,所有的数值。即[1,99999].以下代码,功能为获取一个不多于五位的正整数并输出。int main(){ int n; srand(time(NULL)); printf("%d", rand()%99999+1);}

c语言编程要求输入一个不大于五位的正整数,正序输出。c我们才学到循环...
回答:就是用循环做的。C语法我不太会,定义一个长度为5的int数组,用于保存每次输入的数字,使用循环语句,循环次数等于数组长度,将每次输入的数字存入数组中,循环执行完后对数组排序。大概是这样的。

C语言编程题 给一个不多于五位的正整数,要求: 1.求出它是几位数 2.分...
unsigned int x=1, i=0;unsigned char c[5]={0};while(1){ printf("输入正整数x(不超过5位):");scanf("%u",&x);if(x\/100000){ printf("超过范围!\\n");continue;} i=0;do { c[i++]=x%10;}while(x \/= 10);printf("%d位数\\n",i);while(i >0)printf("%d ",c[--...

c语言给一个不多于5位数的正整数,求出他是几位数,分别输出每一位数字...
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...

用C语言编程:给出一个不多于5位的正整数,判断它是几位数
如果不是,判断a%100是否大于0,如果是,则这个数是三位数,判断a%10是否大于0,如果是,则这个数是两位数,如果以上情况都不是,就是一位数。注释:a%1000的结果表示a除以1000后的余数(小学数学里的除法余数概念),如果大于0,说明有余数,说明a至少大于1000.如果等于0,说明a小于或等于1000 ...

给一个不多于五位正整数,请输出每一位数(运用条件语句)
用什么语言呢,下面是C语言的示例:include<stdio.h> main(){ int i;scanf("%d",&i);while(i>0) {printf("%d\\n",i%10);i\/=10;} } 上面是反序的,正顺的如下:include<stdio.h> voidput(intx){ if(x>10)put(x\/10);printf("%d\\n",x%10);} main(){ inti;scanf("%d",&i)...

相似回答