C语言实现:查找0~100000范围内的水仙花数

咖啡半糖
咖啡半糖
发布时间:2026-10-16| 7人浏览过
原创

水仙花数是指数学中的一种自幂数,即一个n位数,其各位数字的n次方之和等于该数本身。本文将演示如何利用C语言编写程序,遍历0至100000范围内的整数,识别并打印出所有水仙花数。核心思路包括获取数字位数、使用pow函数计算幂次以及累加各位数值。

水仙花数的定义与解题思路

水仙花数(Narcissistic number)通常指一个 n 位数(n ≥ 3),它的每个位上的数字的 n 次幂之和等于它本身。例如:153 是一个三位数,因为 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153。本题目标是在 0~100000 范围内找出所有满足此条件的数字。

解决该问题需要执行以下操作:

  • 遍历范围:使用 for 循环依次检查每个整数。
  • 获取位数:计算当前数字是几位数,这决定了次方的指数 n。
  • 拆分与求幂:提取每一位数字,利用数学库中的 pow 函数计算其 n 次方。
  • 求和对比:累加所有位的幂次结果,若总和等于原数字,则确认为水仙花数。

核心逻辑分析

在实现过程中,有两个关键点需要注意:

  1. 位数计算的隔离性:在计算数字位数时,通常需要不断除以10直到商为0。如果直接修改用于外层循环的变量 i,会导致死循环或逻辑错误。因此,必须引入一个临时变量(如 z)来保存原值并参与位数计算,保留原变量 i 不变以进行后续的值比较。
  2. 数学函数的引用:计算次方需要引用标准库 <math.h> 中的 pow(base, exponent) 函数。

第1步:编写辅助函数 Sum

为了代码整洁,我们将“计算各位数字 n 次方之和”的逻辑封装为一个独立函数 Sum(int x, int y),其中 x 为待检查的数字,y 为该数字的位数。

int Sum(int x, int y)
{
	int k = 0;
	int num = 0;
	int sum = 0;
	// 循环 y 次,每次处理一位
	for (k=0; k<y; k++) 
	{
		num = pow(x % 10, y); // 取最低位并求 y 次方
		sum += num;           // 累加到总和
		x /= 10;              // 去掉最低位,准备处理下一位
	}
	return sum;               // 返回最终的和
}

第2步:编写主函数 main 进行遍历判断

在主函数中,我们遍历 0 到 100000 的所有整数。对于每个整数,先确定其位数 n,然后调用 Sum 函数计算各数位幂次和,最后与原数比对。

#include <stdio.h>
#include <math.h>
 
// 上方定义的 Sum 函数...
 
int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		int n = 1;                // n 初始化表示初始位数至少为1(针对个位数)
		int z = i;                // 使用 z 备份 i 的值,避免循环中被修改
		
		// 计算位数 n
		while (z / 10 != 0) 
		{
			n++;
			z = z / 10;            
		}
		
		// 判断各位 n 次方之和是否等于原数 i
		if (i == Sum(i, n))        
			printf("%d ", i);
	}
	return 0;
}

运行结果验证

编译并运行上述代码,程序将筛选出范围内的所有水仙花数。以下是预期的输出结果示意图:

从结果可以看出,常见的如 1、153、370、371、407 等均被正确识别。对于五位数及以下的范围,水仙花数数量有限,程序执行速度极快。

总结

通过以上步骤,我们实现了用 C 语言简单粗暴地查找指定范围内水仙花数的功能。关键在于处理好临时变量以避免数据污染,以及正确运用 pow 函数和取模运算符 % 来拆解数字。以上就是C语言查找水仙花数的详细内容,更多关于C语言基础算法优化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。