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

embedded/2024/9/24 22:26:12/

       前言

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

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

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

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

        一位自幂数:独身数

        三位自幂数:水仙花数

        四位自幂数:四叶玫瑰数

        五位自幂数:五角星数

        六位自幂数:六合数

        七位自幂数:北斗七星数

        八位自幂数:八仙数

        九位自幂数:九九重阳数

        十位自幂数:十全十美数

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

        题目要求

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

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

        代码展示

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{int i;for (i = 0;i <= 100000;i++){//计算有多少位,nint 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。这样我们就得到了这个数字的位数。

        

		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次幂相加。

        

		tmp = i;int sum = 0;while (tmp){sum += (int)pow(tmp % 10, n);tmp /= 10;}

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

        运行结果

        

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


http://www.ppmy.cn/embedded/13773.html

相关文章

前端this指向问题

在前端开发中&#xff0c;this 的指向取决于函数的调用方式。在全局作用域中&#xff0c;this 指向 window 对象。在对象方法中&#xff0c;this 指向调用该方法的对象。箭头函数中的 this 指向定义时的上下文&#xff0c;而不是调用时的上下文。 在函数中&#xff0c;this 的…

【八股】计算机网络篇

网络模型 应用层【HTTP&#x1f449;报文/消息】 传输层【TCP或UDP&#x1f449;段&#x1f449;MSS】网络层【IP、寻址和路由&#x1f449;MTU】 ①IP&#xff08;Internet Protocol&#xff0c;网际协议&#xff09;主要作用是定义数据包的格式、对数据包进行路由和寻址&…

HOOPS Commuicator:基于Web的交互式2D/3D图形轻量化引擎

在当前数字化时代&#xff0c;Web基础的3D应用程序正在成为行业标准&#xff0c;尤其是在工程和制造领域。Tech Soft 3D公司旗下的HOOPS Communicator正是针对这一需求设计的高级解决方案&#xff0c;提供了一套全面的工具&#xff0c;旨在帮助开发者构建复杂的3D工程应用程序。…

tailwindcss在使用cdn引入静态html的时候,vscode默认不会提示问题

1.首先确保vscode下载tailwind插件&#xff1a;Tailwind CSS IntelliSense 2.需要在根目录文件夹创建一个tailwind.config.js文件 export default {theme: {extend: {// 可根据需要自行配置&#xff0c;空配置项可以正常使用},}, }3.在html文件的标签中引入配置文件&#xf…

babylonjs Web3D模型载入报错解决

报错1:BJS - [14:23:17]: Unable to find a plugin to load .glb files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes 报错2:BJS - [14:11:48…

29. 【Android教程】折叠列表 ExpandableListView

本节学习一个可折叠的 ListView&#xff0c;可以用在一些需要分类的场景下。通过 ExpandableListView 我们可以首先在 ListView 上展示大的分类&#xff0c;当点击某个类别的时候再将 ListView 做一个展开&#xff0c;展示该类下的所有子类供用户选择。它与 ListView 的不同主要…

正则表达式学习笔记

正则表达式 正则匹配函数简单的模式&#xff1a;字符匹配2.1 元字符2.2 概括字符集2.3 数量词2.4 边界匹配 ^和$2.5 组 ( )2.6 匹配模式参数2.7 re.sub替换字符串2.8 把函数做为参数传递2.9 group分组 正则表达式的一些建议 正则匹配函数 1.1 re.compile re.compile是将正则表…

hive 不同维度聚合 grouping sets 使用详情

当结构数据表中&#xff0c;多列维度字段场景&#xff0c; 需要看不同维度聚合后的数据集时。 整体 demo sql select if(CAST (GROUPING__ID AS INT) & 80, A, all) as A,if(CAST (GROUPING__ID AS INT) & 40, B, all) as B,C,D from table_name where dt ${dt} gro…