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(他本身)是否相等,如果相等,那么这个数就是自幂数。我们将这些自幂数打印出来。

运行结果

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

相关推荐
xianluohuanxiang14 小时前
高精度气象:极端天气一来,零售最先出问题的不是客流,而是补货体系和损失控制
开发语言·人工智能·深度学习·机器学习·零售
KKKlucifer14 小时前
零信任融合 4A 平台,构建全域身份动态可信管控体系
开发语言·php
txzrxz14 小时前
c++深度搜索讲解及例题
开发语言·c++·深度搜索·例题讲解
yu859395814 小时前
时延估计的互相关算法(MATLAB实现)
开发语言·算法·matlab
ou.cs14 小时前
c# SemaphoreSlim保姆级教程
开发语言·网络·c#
|_⊙14 小时前
红黑树 (C++)
开发语言·c++·学习
Fate_I_C15 小时前
Kotlin 内部类和嵌套类
java·开发语言·kotlin
她说彩礼65万15 小时前
C语言 整形提升及算数转换
linux·服务器·c语言
昵称暂无115 小时前
低代码平台深度测评:OutSystems vs Mendix谁更胜一筹
开发语言·低代码
We་ct15 小时前
JS手撕:函数进阶 & 设计模式解析
开发语言·前端·javascript·设计模式·面试·前端框架