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

       前言

        今天我们来看一下如果求解自幂数(水仙花数),水仙花数是自幂数的一种,我们来看看自幂数的概念吧,当一个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.hqwc.cn/news/635717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSGO挂箱号惨遭红锁,有人亏了100万

红锁大行动真的来了&#xff0c;V社在4月16号的更新里面&#xff0c;虽然没有说关于VAC相关的更新&#xff0c;但是CS2实测&#xff0c;已经实装到了游戏里面&#xff0c;伴随着这一次更新&#xff0c;很多的新号&#xff0c;尤其是像挂箱号相继出现大量的VAC红锁。 被红锁的具…

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络&#xff0c; 2020)用于特征融合层。 官方论文地址&#xff1a;https://arxiv.org…

基于达梦数据库开发-Java篇

文章目录 前言一、示例展示1.环境准备2.采用基础的jdbc调用3.采用扩展的mybatis调用 二、注意事项1.使用路径注解2.数据库对象的准确引用 三、可能异常1.无效的表或视图名2.无效的表或视图名3.网络通信异常 总结 前言 达梦提供了JDBC方式的驱动以便进行Java开发。默认情况下相…

Unity Editor编辑器扩展之创建脚本

前言 既然你看到这篇文章了&#xff0c;你是否也有需要使用代码创建脚本的需求&#xff1f;使用编辑器扩展工具根据不同的表格或者新增的内容去创建你想要的脚本。如果不使用工具&#xff0c;那么你只能不断去修改某个脚本&#xff0c;这项工作既繁琐也浪费时间。这个时候作为程…

什么是时间序列分析

时间序列分析是现代计量经济学的重要内容&#xff0c;广泛应用于经济、商业、社会问题研究中&#xff0c;在指标预测中具有重要地位&#xff0c;是研究统计指标动态特征和周期特征及相关关系的重要方法。 一、基本概念 经济社会现象随着时间的推移留下运行轨迹&#xff0c;按…

listpack

目录 为什么有listpack? listpack结构 listpack的节点entry 长度length encoding编码方式 listpack的API 1.创建listpack 2.遍历操作 正向遍历 反向遍历 3.查找元素 4.插入/替换/删除元素 总结 为什么有listpack? ziplist是存储在连续内存空间&#xff0c;节省…

VSCode + ESP-IDF安装与配置全过程

接前一篇文章&#xff1a;ESP-IDF下载与安装完整流程 前一篇文章讲解了如何手动下载ESP-IDF&#xff0c;也就是快速入门 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)中的红色框中的部分&#xff1a; 本文讲解另一种方法&#xff0c;也是更为常用的方式 —— VS…

通俗说字解词:什么是道理?常说讲道理,李秘书讲写作这节就给你讲“道理”!

通俗说字解词&#xff1a;什么是道理&#xff1f;常说讲道理&#xff0c;李秘书讲写作这节就给你讲“道理”&#xff01; 说到“道理”&#xff0c;这可真是个有意思的词。它由“道”和“理”两个部分组成&#xff0c;就像一碗好吃的面&#xff0c;有汤有料&#xff0c;缺一不可…

MySQL-实验-单表、多表数据查询和嵌套查询

目录 0.简单子查询 &#xff08;1&#xff09;带比较运算符的子查询 &#xff08;2&#xff09;关键字子查询 1.多表查询 3.子查询 4.多表子查询 0.简单子查询 &#xff08;1&#xff09;带比较运算符的子查询 在右侧编辑器补充代码&#xff0c;查询大于所有平均年龄的员…

【学习】自动化测试有哪些优势和不足

在当今这个数字化时代&#xff0c;软件测试已经成为了任何一款产品成功的关键因素之一。而在诸多的测试方法中&#xff0c;自动化测试凭借着其独特的魅力吸引着越来越多的企业。今天就让我们一起走进自动化测试的世界&#xff0c;探讨它的优势与不足。 一、自动化测试优势 1.…

小红的排列构造(dp优化)

题目描述 小红拿到了一个长度为n的数组a&#xff0c;她希望你构造两个排列p和q&#xff0c;满足对于i∈[1,n],ai∈[1,n]pi或qi二选一。你能帮帮她吗&#xff1f;定义排列是一个长度为n的数组&#xff0c;其中1到n每个元素恰好出现1次。 输入描述:第一行输入一个正整数n&#…

Github 2024-04-20 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目2Python项目2Swift项目2HTML项目1CSS项目1Go项目1C项目1C++项目1Rust项目1编程面试大学:成为软件工程师的全面学习计划 创建周期…