解题思路:主要实现三个功能:
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;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复