解题思路:主要实现三个功能:

1位数:利用一个数不停的除以10来实现,每一次循环i(位数)加一。

2正序排列:要得到一个数x的第一个数字z,先要不断除以10,每次循环i(位数)加一,到数值小于等于9时停止循环,同时每次x要赋值给新的x(去掉首数字的x)x=x-z*(10的i次方),这样在操作,得到首数字。

3逆序输出:不断的求一个数x除以10的余数,同时x=x/10生成新的x

基本适用于所有位数(不止五位)

注意事项:主要是二功能中的双重循环,内循环求x的位数i(实际上是位数减一)和首数字,外循环求新的x,但每次i的值要重新记为0;pow函数是double类型,要注意转换为int。


参考代码:

#include<stdio.h>
#include<math.h>

int weishu(int x);//函数声明
int nishu(int x);
int zhengxu(int x);


int weishu(int x)//求一个数的位数
{
 int y=1;
 while(x/10)//当x/10等于0时终止循环
 {
  x=x/10;
  y++;
 }
 printf("%d\n",y);
 return 0;
}


int zhengxu(int x)//求一个数的正序排列
{
 int z,i=0;
 while(x>0)
 {
  z=x;
  while(z>9)
  {
   z=z/10;//求首数字
   i++;
  }
  printf("%d\t",z);
  x=x-z*(int)(pow(10,i));//类型转换
  i=0;//重置位数
 }
 return 0;

}


int nishu(int x)//求一个数的逆序
{
 int z;
 while(x>0)
 {
  z=x%10;
  x=x/10;
  printf("%d",z);
 }
 return 0;
}


main()
{
 int a;
 scanf("%d",&a);
 weishu(a);//函数调用
 zhengxu(a);
 printf("\n");
 nishu(a);//函数调用
 printf("\n");
 return 0; 
}


点赞(2)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论