今天在B站学习C语言的基础,出了道题目是自幂数,觉得很意思。对于这道题,我觉得是:没想明白之前简直一团乱麻,想明白了之后就出奇的简单了。现在我分享一下我的做题过程,算是自己整理的一些笔记吧,主要是为了记录自己学习过程的中一些片段,希望各位读者不要笑话呀!

什么是自幂数?

如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
例如:在十进制中,153是一个三位数,各个数位的3次幂之和为1^3+5^3+3^3=153,所以153是十进制中的自幂数。–摘自《百度百科》

求解思路

对于这个题目中,其实不难理解我们需要做以下三件事:

  1. 求出给出数字的位数

    小编认为这也这个题目的难点所在,但是一旦想明白了就很简单。我们可以每次除以10,然后当得出的商小于0时,说明已经到了最前一位了,中间新建一个变量n++,作为计数器,得数字出位数。(while循环中,等于0是会跳出不执行,其余情况都是会执行的,所以我们可以直接写tmp/10)

            while (tmp / 10)//tmp是我们要求证是否是水仙花的数字{n++;tmp = tmp / 10;}
    
  2. 对每位数字给出对应的次方

    这一步中我们需要用到一个math.h的头文件,这文件中有直接次方计算的函数pow,直接调用比较简单。其中pow(m,n),m代表被乘方数,n代表次方数。接着我们用模可以取余的方法就能拿到每位数。拿到一位数除一次10,方便取下一位

            while (tmp)//tmp是我们要求证是否是水仙花的数字{sum += pow(tmp % 10,n);tmp = tmp / 10;}
    
  3. 求证次方和是否等于原数字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语言:自幂数最通俗讲解相关推荐

  1. 【一文讲解深度学习】语言自然语言处理(NLP)第一篇

    [一文讲解深度学习]语言自然语言处理(NLP) 博主介绍 自然语言处理概述 NLP 的定义 NLP的主要任务 分词 词义消歧 识别物体识别(NER) 词性标注(PoS) 文本分类 语言生成 问答(QA ...

  2. opc ua 用哪种语言编写_通俗讲解OPC UA 之通俗入门篇

    这是一篇通俗讲解OPC UA的入门篇 为什么要通俗的讲呢,主要是怕自己讲的自己看不懂,会尴尬. 比这更尴尬的是,自己写的没看懂,你们却看懂了. OPC UA内容过于深奥,笔者最近研究,说不上研究,只能 ...

  3. 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇...

    1.2 这样学习C语言最有效 学好C语言的秘诀就是1234:"一字真言,两种态度,三个框架,四项注意". 一.一字真言 各位看官,学好C语言,其实只需一个字,那就是"编& ...

  4. 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇

    1.2 这样学习C语言最有效 学好C语言的秘诀就是1234:"一字真言,两种态度,三个框架,四项注意". 一.一字真言 各位看官,学好C语言,其实只需一个字,那就是"编& ...

  5. c语言不定长数组_学习C语言这三块“硬骨头”不搞定学了也是白学

    C语: C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. 01指针 C语言 指针公认最难理解的概念,也是让很多初学 ...

  6. 模拟儿童学习多语言,Deepmind让DL看视频就学会翻译

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:新智元 [导读]小孩儿是怎么学多种语言的?只通过观察,就同时掌握了不同语言.如何 ...

  7. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  8. 学习go语言国内最全资料链接

    就最近和各位大佬认识下来,以前觉得学习go语言,可能资料比较少,可是后来才发现,原来资料并不少,甚至可以说通过大家的努力,go社区已经非常包容且完善了 接下来会推荐一些资料,以及大佬 就最近和各位大佬 ...

  9. c++ 数组置0_0基础学习C语言第七章:数组(1)

    C 数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量.数组的声明并不是声明一个个单独的变量,比如 numb ...

最新文章

  1. 线上接口经常超时,我用线程池+ FutureTask解决了,YYDS
  2. 云南大学信息学院c语言实验七,云南大学软件学院C语言程序
  3. SSL WS-Security--Web Service安全保障
  4. 5.16 Stacks and Queues
  5. mysql guid_MySQL – 自动增加到guid
  6. 使用RMAN在ASM和文件系统之间拷贝数据
  7. 路径总和Python解法
  8. Linux中exit与_exit的区别
  9. grunt入门 出处:http://artwl.cnblogs.com
  10. 【牛客 - 331E】炫酷划线(权值线段树,树状数组哈希,随机数)
  11. c语言一维数组定义可用字母吗,C语言一维数组的定义和引用
  12. Convert Sorted Array to Binary Search Tree With Minimal Height
  13. classification、part segmentation、semantic segmentation、instance segmentation
  14. linux之我常用的20条命令(之一)
  15. Cisco/华为 远程管理设备telnet的N种设置方法
  16. mescroll.js 上拉刷新 下拉加载
  17. 【图像增强】基于麻雀搜索算法与双伽马校正的图像自适应增强算法Matlab代码
  18. 自学编程,他从阿里校招生到高级技术专家
  19. Layabox联手金山云,推出8折优惠大礼包!
  20. 2014年7月份第3周51Aspx源码发布详情

热门文章

  1. 【Spring Cloud】新闻头条微服务项目:自媒体前后端搭建素材管理(含优化)
  2. 推荐系统中的选择偏差及处理
  3. RPM包安装的数据库进行版本升级
  4. @ select 函数使用说明
  5. 深入学习HTTP协议
  6. 产品经理——从一块钱看产品推广方案
  7. 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度
  8. 随手笔记(九)———类型装换技巧
  9. 2022-09-12 mysql语法分析实现
  10. 如何制作一寸。二寸。六寸照片 多学点,以后自己也可以弄哦