Bootstrap

用C语言实现数字的顺序输出和逆序输出

引言:介绍顺序输出和逆序输出的概念及其在编程中的应用场景.

在解决这个问题之前,我们可以先解决如何输出一个数的位数,得到了位数之后,我们便可以以位数为依托找出后续的各种关系,从而解决问题.

我们把问题简化为如下问题:

输入一个整数(可以是正数,负数或者0),要求 : (1) 求出它是几位数; (2) 分别输出每一位数字.例如123,输出1 2 3; (3) 按逆序输出各位数字,例如原数为 321, 应输出 1 2 3。

求位数代码:

int n;
printf("请输入一个整数:\n");
scanf("%d", &n);
int m;
m = n;
//输出位数
if(m==0)
{
	t = 1;
}
else
{
	while (m != 0)
	{
		t++;
		m /= 10;

	}
}
printf("%d是%d位数:\n",n,t);

我们先从键盘获取一个数字,由数学知识可知求位数与10关联,我们把获得的n不断除以十,同时定义一个变量t来保存位数.思路如下图:

注意一点细节:上面另外定义了一个m变量,是因为下面printf输出时需要原来的n,我没有动n的值,而是把n的值赋给m,让m的值去发生变化.

接下来我们来处理顺序输出问题

顺序输出代码示例:

//顺序输出
int w=1;
temp = abs(n);
for (int i = 1;i < t;i++)
{
	w *= 10;
}
printf("顺序输出每一位数字:\n");
if (n < 0)
{
	printf("-");
}
while (w > 0)
{
	printf("%d ", temp / w);
	temp = temp % w;
	w /= 10;
}
printf("\n");

因为涉及到负数,顺序输出每一位时我们可以把n值取绝对值,用到abs函数,赋值给temp变量.

t 是 n 的位数,比如 n = 123,t = 3。
    •    w从 1 开始,每次乘 10,最终等于 10^(t-1)。
    •    例如:
    •    n = 123,t = 3,最终 w = 100(10^(3-1))。
    •    n = 5678,t = 4,最终 w = 1000(10^(4-1))。

while循环代码解析如下图:

首先temp/w得首位并输出,如12345/10000可得1,w为10000.

第二步:temp %= w 去掉最高位,剩下后面的数字,如12345%10=2345.
第三步:w /= 10,让 w变成 10 的更小次幂,继续提取下一位,w为1000.然后接下来用2345进行接下来的操作.       

注意细节:由于负数首位输出应该为负数,我们可以判断当n<0时,先输出一个负号,这个问题便解决了.                                                                               

逆序输出代码示例:


	printf("逆序输出每一位数字:\n");
	temp = abs(n);
	if (temp == 0)
	{
		printf("0 ");
	}
	while (temp > 0)
	{
		printf("%d ", temp %10);
		temp /= 10;

	}
	printf("\n");
	return 0;
}

代码解析:逆序输出的思路比较简单,temp%10获取最低位并打印,temp/=10去掉最低位,继续循环.

注意细节:处理0的特殊情况.

思路如下图:

运行结果截图:

总结:

1. 功能概述

本程序实现了以下功能:
    •    计算用户输入整数的位数(包括正数、负数和 0)。
    •    按顺序输出整数的每一位数字。
    •    按逆序输出整数的每一位数字。

2. 代码实现思路

(1) 计算整数的位数
    •    使用 while 循环对 m = abs(n) 进行除 10 运算,每次循环 t++ 直到 m 变为 0,即可统计出 n 的位数 t。
    •    如果 n == 0,特判 t = 1,因为 0 只有一位。

(2) 顺序输出每一位数字
    •    先计算出 w = 10^(t-1),即 w 为整数 n 的最高位对应的除数。
    •    通过 temp / w 依次获取最高位数字,并更新 temp %= w 去掉已经输出的部分,w /= 10 逐步降低位数,直到 w == 0。

(3) 逆序输出每一位数字
    •    直接利用 temp % 10 获取个位数字,并 temp /= 10 逐步去掉已输出部分,直到 temp == 0。

;