C语言计算任意位数的水仙花数

一、水仙花数定义:

水仙花数(Narcissistic number)是指一个 n(n≥3) 位数,它的每个数位上的数字的 n 次幂之和等于它本身。例如 3 位数的 153:1³ + 5³ + 3³ = 153

二、C语言计算任意位数的水仙花数代码

c 复制代码
#include<stdio.h>

long int TenPower(int power)		// 计算 10 的 power 次幂
{
	if(power == 0){
		return 1;
	}
	long int result = 1;

	for(int i = 0;i < power; i++){
		result *= 10;
	}
	return result;
}	

int NumPower(int base, int power)		// 计算 base 的 power 次幂
{
	if(power == 0){
		return 1;
	}

	int result = 1;
	for(int i = 1; i <= power; i++){
		result *= base;
	}
	return result;
}

int main(void)
{
	int dig;				// 保存位数
	long int result;		// 保存次方计算结果
	
	puts("请输入位数(三位以上):");			// 根据水仙花数的定义,需要 3 位数及以上
	scanf("%d",&dig);
	if(dig < 3){
		puts("错误!位数必须为2以上!");
		return 0;
	}

	printf("%d位数的水仙花数有:", dig);
	for(long int i = TenPower(dig-1); i <= (TenPower(dig)-1); i++){			/* 根据给出的位数,拟定计算范围。
																			   如 3 位数计算范围为 100 ~ 999 */
		long int tmp = i;
		result = 0;
		for(int j = 1; j <= dig; j++){					// 计算每一位数字的 dig 次方
			result += NumPower(tmp/TenPower(dig-j), dig);			// 计算每一位数的 dig 次幂之和。例如计算 999 每一位的 dig 次幂之和
			tmp = tmp%TenPower(dig-j);								/* tmp 意为临时,便于计算每一位上的数字。
																	   例如计算 999,则首先计算 999/100 得到百位上数字为 9,
																	   然后 999%100 得到 99,然后 99/10 得到十位上数字为 9,
																	   然后 99%10 得到 9,然后 9/1 得到个位上数字为 9. */
		}
		if(i == result){					// 若该数字每一位数的 dig 次幂之和等于该数字,则为水仙花数
			printf("%ld ", i);
		}
		if(i == (TenPower(dig)-1)){			// 计算结束,换行符号
			puts("");
		}
	}

	return 0;
}

三、运行结果

相关推荐
CYRUS_STUDIO17 分钟前
LLVM 不止能编译!自定义 Pass + 定制 clang 实现函数名加密
c语言·c++·llvm
CYRUS_STUDIO31 分钟前
OLLVM 移植 LLVM 18 实战,轻松实现 C&C++ 代码混淆
c语言·c++·llvm
南山十一少1 小时前
STM32CubeMX + HAL 库:基于 I²C 通信的 BMP280气压海拔测量
c语言·stm32·嵌入式硬件
lingran__3 小时前
C语言制作扫雷游戏(拓展版赋源码)
c语言·算法·游戏
77qqqiqi3 小时前
学习结构体
c语言·学习
学习噢学个屁4 小时前
基于STM32智能阳台监控系统
c语言·stm32·单片机·嵌入式硬件
房开民12 小时前
使用海康机器人相机SDK实现基本参数配置(C语言示例)
c语言·数码相机·机器人
Tina表姐14 小时前
(C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
c语言·开发语言·数学建模
高山有多高15 小时前
详解文件操作
c语言·开发语言·数据库·c++·算法
恒森宇电子有限公司19 小时前
IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯
c语言·开发语言·单片机