欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.运行结果

C语言基础—把不大于5位的整数各位上数字的正序和逆序输出
C语言基础—把不大于5位的整数各位上数字的正序和逆序输出

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的值。