c语言 给一个不多于5位的正整数 用C语言写出
例如 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语句。
先上图
代码如下:
#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;
}
定义一个数组把分离的数字放在数组里,然后for循环逆序输出就行了,个人见解
仅供参考
#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;
}
}
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;}