栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学习C语言:自幂数最通俗讲解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习C语言:自幂数最通俗讲解

今天在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 
# include 
int main()
{
    int i  = 0;
    for ( i = 0; i < 10000; i++)
    {
        int n = 1;//数字的位数为n
        int tmp = i;//临时变量tmp
        while (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的值其实已经改变了,因此这里要给零时变量。

小编碎碎念:之前觉得写代码是一件很酷的事情,但是真正走上了这条路之后,才发现这条路其实枯燥无比,但是老话说的好,自己选择的路哭着也要走完。所以希望在条路的小伙伴们,我们一起加油,愿他日我们也能小白化身大佬,成为自己最初想要成为的样子!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892771.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号