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

运行结果

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

相关推荐
Foyo Designer9 分钟前
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 中的内置对象:request、response、session 的使用示例
java·开发语言·servlet
可可乐不加冰17 分钟前
实时读取另一个串口发来的返回数据
android·开发语言·kotlin
GH小杨24 分钟前
Kotlin D1
android·开发语言·kotlin
Root062426 分钟前
【笔记】记一次easyExcel中注解ExcelProperty映射字段赋值无效问题
java·开发语言·笔记
GH小杨26 分钟前
Kotlin D2
开发语言·微信·kotlin
&岁月不待人&27 分钟前
Kotlin 协程(三)协程的常用关键字使用及其比较
android·开发语言·kotlin
带上一无所知的我28 分钟前
解锁Conda:Python环境与包管理的终极指南
开发语言·python·conda
一个努力学习的小男孩28 分钟前
java环境部署
java·开发语言
A boy CDEF girl34 分钟前
【JavaEE】阻塞队列
java·开发语言·java-ee
酷爱码1 小时前
2025DNS二级域名分发PHP网站源码
开发语言·php