C语言基础—把不大于5位的整数各位上数字的正序和逆序输出
程序员文章站
2022-03-01 22:21:51
...
整数的输出
1.算法思想
打印就是把数字信息展示在屏幕上,输入一个数据,可以正序打印,也可以逆序打印,
如输入12345
正序打印可以为1, 2,3, 4,5,
逆序打印可以为5, 4,3, 2,1,
处理这种问题方法很多,这里只讲一下我的方法(话不多说,先看代码):
2.代码部分
#include <stdio.h>
#include <math.h>
int main()
{
int num,place,x;
scanf_s("%d", &num);
place = log10((double)num) + 1; //计算你输入的是几位数
x = num;
printf("%d为%d位数\n", num, place);
printf("顺序输出为:");
for (int j = pow(10, place-1); j > 0; j = j / 10) {
printf("%d,", num / j);
num %= j;
}
printf("逆序输出为:");
for (int i = 0; i < place; i++) {
printf("%d,", x % 10);
x /= 10;
}
return 0;
}
3.运行结果
4.算法解析
(1) 首先需要讲解的是place的作用, 对于任意不多余 5 位的一个正整数num,有10(x-1)≤num<10x,那么num的位数为x,则
x-1≤log10(num)<x
即 x=(int)log10(num)+1,
所以程序中直接用place = log10((double)num) + 1;一行结束;
(2) 其次要讲为什么用了一个x = num;在程序进行中,顺序输出后num的值已经改变,第二轮逆序输出的时候用x代替了num实现效果;
(3) 最后要讲两个循环的作用,其核心分别是 num/ j;和x %10;很容易想到,逆序输出需要取余数,正序输出需要留下位数最高的那一位,这样就可以理解核心内容了;
5. 注意事项
(1) 位数不能超过五位数,因为数学公式对五位一下的数成立
(2) printf("%d,", x % 10);输出的时候在后边直接放上了x%10是避免改变x的值。