学习C语言:自幂数最通俗讲解
今天在B站学习C语言的基础,出了道题目是自幂数,觉得很意思。对于这道题,我觉得是:没想明白之前简直一团乱麻,想明白了之后就出奇的简单了。现在我分享一下我的做题过程,算是自己整理的一些笔记吧,主要是为了记录自己学习过程的中一些片段,希望各位读者不要笑话呀!
什么是自幂数?
如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
例如:在十进制中,153是一个三位数,各个数位的3次幂之和为1^3+5^3+3^3=153,
所以153是十进制中的自幂数。–摘自《百度百科》
求解思路
对于这个题目中,其实不难理解我们需要做以下三件事:
求出给出数字的位数
小编认为这也这个题目的难点所在,但是一旦想明白了就很简单。我们可以每次除以10,然后当得出的商小于0时,说明已经到了最前一位了,中间新建一个变量n++,作为计数器,得数字出位数。(while循环中,等于0是会跳出不执行,其余情况都是会执行的,所以我们可以直接写tmp/10)
while (tmp / 10)//tmp是我们要求证是否是水仙花的数字{n++;tmp = tmp / 10;}
对每位数字给出对应的次方
这一步中我们需要用到一个math.h的头文件,这文件中有直接次方计算的函数pow,直接调用比较简单。其中pow(m,n),m代表被乘方数,n代表次方数。接着我们用模可以取余的方法就能拿到每位数。拿到一位数除一次10,方便取下一位
while (tmp)//tmp是我们要求证是否是水仙花的数字{sum += pow(tmp % 10,n);tmp = tmp / 10;}
求证次方和是否等于原数字n,如果是那么则说明是自幂数
if (sum == i){printf("%d是水仙花数\n",i);}
上面就是求解自幂数的过程,下面是完整代码:
# include <math.h>
# include <stdio.h>
int main()
{int i = 0;for ( i = 0; i < 10000; i++){int n = 1;//数字的位数为nint tmp = i;//临时变量tmpwhile (tmp / 10){n++;tmp = tmp / 10;}tmp = i;int sum = 0;while (tmp){sum += pow(tmp % 10,n);tmp = tmp / 10;}if (sum == i){printf("%d是水仙花数\n",i);}}return 0;
}
看了上面的完整代码,就有一个问题需要特别注意,小编自己妥妥的踩坑了。问题是我们需要给出零时变量!原因很简单,我们在求数字位数的时候,都会对原数字进行操作,那么如果不给零时变量,最后比较我们拿到的i的值其实已经改变了,因此这里要给零时变量。
小编碎碎念:之前觉得写代码是一件很酷的事情,但是真正走上了这条路之后,才发现这条路其实枯燥无比,但是老话说的好,自己选择的路哭着也要走完。所以希望在条路的小伙伴们,我们一起加油,愿他日我们也能小白化身大佬,成为自己最初想要成为的样子!
学习C语言:自幂数最通俗讲解相关推荐
- 【一文讲解深度学习】语言自然语言处理(NLP)第一篇
[一文讲解深度学习]语言自然语言处理(NLP) 博主介绍 自然语言处理概述 NLP 的定义 NLP的主要任务 分词 词义消歧 识别物体识别(NER) 词性标注(PoS) 文本分类 语言生成 问答(QA ...
- opc ua 用哪种语言编写_通俗讲解OPC UA 之通俗入门篇
这是一篇通俗讲解OPC UA的入门篇 为什么要通俗的讲呢,主要是怕自己讲的自己看不懂,会尴尬. 比这更尴尬的是,自己写的没看懂,你们却看懂了. OPC UA内容过于深奥,笔者最近研究,说不上研究,只能 ...
- 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇...
1.2 这样学习C语言最有效 学好C语言的秘诀就是1234:"一字真言,两种态度,三个框架,四项注意". 一.一字真言 各位看官,学好C语言,其实只需一个字,那就是"编& ...
- 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇
1.2 这样学习C语言最有效 学好C语言的秘诀就是1234:"一字真言,两种态度,三个框架,四项注意". 一.一字真言 各位看官,学好C语言,其实只需一个字,那就是"编& ...
- c语言不定长数组_学习C语言这三块“硬骨头”不搞定学了也是白学
C语: C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. 01指针 C语言 指针公认最难理解的概念,也是让很多初学 ...
- 模拟儿童学习多语言,Deepmind让DL看视频就学会翻译
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:新智元 [导读]小孩儿是怎么学多种语言的?只通过观察,就同时掌握了不同语言.如何 ...
- 人工智能算法通俗讲解系列(二):逻辑回归
2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...
- 学习go语言国内最全资料链接
就最近和各位大佬认识下来,以前觉得学习go语言,可能资料比较少,可是后来才发现,原来资料并不少,甚至可以说通过大家的努力,go社区已经非常包容且完善了 接下来会推荐一些资料,以及大佬 就最近和各位大佬 ...
- c++ 数组置0_0基础学习C语言第七章:数组(1)
C 数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量.数组的声明并不是声明一个个单独的变量,比如 numb ...
最新文章
- 线上接口经常超时,我用线程池+ FutureTask解决了,YYDS
- 云南大学信息学院c语言实验七,云南大学软件学院C语言程序
- SSL WS-Security--Web Service安全保障
- 5.16 Stacks and Queues
- mysql guid_MySQL – 自动增加到guid
- 使用RMAN在ASM和文件系统之间拷贝数据
- 路径总和Python解法
- Linux中exit与_exit的区别
- grunt入门 出处:http://artwl.cnblogs.com
- 【牛客 - 331E】炫酷划线(权值线段树,树状数组哈希,随机数)
- c语言一维数组定义可用字母吗,C语言一维数组的定义和引用
- Convert Sorted Array to Binary Search Tree With Minimal Height
- classification、part segmentation、semantic segmentation、instance segmentation
- linux之我常用的20条命令(之一)
- Cisco/华为 远程管理设备telnet的N种设置方法
- mescroll.js 上拉刷新 下拉加载
- 【图像增强】基于麻雀搜索算法与双伽马校正的图像自适应增强算法Matlab代码
- 自学编程,他从阿里校招生到高级技术专家
- Layabox联手金山云,推出8折优惠大礼包!
- 2014年7月份第3周51Aspx源码发布详情