C语言求自幂数(水仙花数与其他自幂数)

前言

今天我们来看一下如果求解自幂数(水仙花数),水仙花数是自幂数的一种,我们来看看自幂数的概念吧,当一个n位数,它的每个位上的数字的n次幂之和等于它本身的时候,我们称这个数为自幂数。水仙花数就是三位自幂数。

以下内容来自百度百科:自幂数

水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

附:其他位数的自幂数名字

一位自幂数:独身数

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

嘿嘿,感觉它们自幂数的称呼都好有意思,列出来给大家瞅瞅。

题目要求

那么今天咋们要做的就是,使用代码打印出0~100000的自幂数,我们首先需要知道怎么去求一个数字有多少位,之后如何求得每位的数字,然后再求这个数字的n次幂之和。

好啦,具体思路有了,我们上代码

代码展示

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
	int i;
	for (i = 0;i <= 100000;i++)
	{
		//计算有多少位,n
		int n = 1;
		int tmp = i;
		while (tmp>9)
		{
			tmp /= 10;
			n++;
		}
		// 计算每位数字的n次方之和
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum += (int)pow(tmp % 10, n);
			tmp /= 10;
		}
		// 检查是否为水仙花数
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

代码解析

计算位数

首先我们需要做的是遍历0~100000之间的数,我们需要在这些数字里面求符合条件的自幂数,我们使用for循环解决,之后就是求数字有多少位了,因为没有0位的数字,所以我们这里n从1开始计算。

防止我们在循环体内部再次改变i的值,我们将i的值赋给tmp,让tmp来代替i进行运算,我们使用while循环,当我们的tmp,也就是i>9的时候进入循环,为什么是9呢,因为从0到9都是自幂数,之前我们从百度百科了解到,0~9的自幂数被称为独身数。我们使用除10的方式来计算这个数字有多少位,当最后一次除10之后tmp小于9退出循环,n加1。这样我们就得到了这个数字的位数。

cpp 复制代码
		int n = 1;
		int tmp = i;
		while (tmp>9)
		{
			tmp /= 10;
			n++;
		}

计算数字各个位的n次幂之和

我们知道这个数字是多少位之后就可以开始计算这个数字每位的n次幂之和了,设置一个变量sum用来接收求得的n次幂之和,我们这里使用一个数学函数pow,在pow函数中我们先使用给这个数字%10的方式求得个位数的n次幂,之后将这个数字/10之后继续运算。

以1314为例,我们将1314%10之后得到的是4,求出4的4次幂之后,我们将1314/10之后得到131,再次%10运算之后得到1,再求1的4次幂,与之前求得的4的4次幂相加。

cpp 复制代码
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum += (int)pow(tmp % 10, n);
			tmp /= 10;
		}

最后我们判断所求数各个位n次幂之和sum与i(他本身)是否相等,如果相等,那么这个数就是自幂数。我们将这些自幂数打印出来。

运行结果

相信大家都听说过水仙花数,今天带大家了解一下自幂数,希望大家有所收获,如果有问题评论区留言告诉我哦!大家再见!

相关推荐
南玖yy2 分钟前
数据结构C语言练习(两个队列实现栈)
c语言·数据结构·算法
Ljugg8 分钟前
把doi直接插入word中,然后直接生成参考文献
开发语言·c#·word
长流小哥8 分钟前
可视化开发:用Qt实现Excel级动态柱状图
开发语言·c++·qt·ui
Python测试之道17 分钟前
Deepseek API+Python 测试用例一键生成与导出 V1.0.6(加入分块策略,返回更完整可靠)
开发语言·python·测试用例
SRC_BLUE_1720 分钟前
Python GUI 编程 | QObject 控件基类详解 — 定时器
开发语言·数据库·python
啊阿狸不会拉杆27 分钟前
第二十一章:Python-Plotly库实现数据动态可视化
开发语言·python·plotly
滴答滴答嗒嗒滴38 分钟前
Python小练习系列 Vol.12:学生信息排序(sorted + key函数)
开发语言·python
北极象1 小时前
用C实现一个最简单的正则表达式引擎
c语言·正则表达式·php
愚润求学1 小时前
【C++】vector常用方法总结
开发语言·c++·vector
天天进步20151 小时前
Python项目-基于Flask的个人博客系统设计与实现(1)
开发语言·python·flask