首页 > 其他分享 >C语言实例之10求0-10000中的水仙花数

C语言实例之10求0-10000中的水仙花数

时间:2024-11-27 21:58:00浏览次数:10  
标签:10 digit 10000 temp int C语言 水仙花

1. 水仙花数的描述

水仙花数(Narcissistic number)也被称作自恋数、自幂数等。它是指一个三位数,其各位数字的立方和等于该数本身。

例如,153是一个水仙花数,因为 1 3 + 5 3 + 3 3 = 1 + 125 + 27 = 153 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 13+53+33=1+125+27=153。

不过在本题要求的0 - 10000范围内,除了三位数的水仙花数,还可能有四位数符合类似规律(各位数字的四次方和等于该数本身),例如1634,因为 1 4 + 6 4 + 3 4 + 4 4 = 1 + 1296 + 81 + 256 = 1634 1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634 14+64+34+44=1+1296+81+256=1634。

2. 实现流程

  1. 遍历0到10000之间的每一个整数。
  2. 对于每个整数,通过取余和除法运算分离出它的每一位数字。
    • 如果是三位数,分离出百位、十位、个位数字,计算它们的立方和并与该数本身进行比较,若相等则为水仙花数。
    • 如果是四位数,分离出千位、百位、十位、个位数字,计算它们的四次方和并与该数本身进行比较,若相等则为水仙花数。

3. 实例代码

#include <stdio.h>
#include <math.h>

int main() {
    printf("0 - 10000中的水仙花数为:\n");

    // 遍历0到10000之间的所有数
    for (int i = 0; i <= 10000; i++) {
        int num = i;
        int sum = 0;
        int digit_count = 0;
        int temp = num;

        // 计算数字的位数
        while (temp!= 0) {
            digit_count++;
            temp /= 10;
        }

        temp = num;

        // 根据位数分离数字并计算各位数字的幂和
        if (digit_count == 3) {
            // 三位数的情况
            while (temp!= 0) {
                int digit = temp % 10;
                sum += (int)pow(digit, 3);
                temp /= 10;
            }
        } else if (digit_count == 4) {
            // 四位数的情况
            while (temp!= 0) {
                int digit = temp % 10;
                sum += (int)pow(digit, 4);
                temp /= 10;
            }
        }

        // 判断是否为水仙花数并输出
        if (sum == num) {
            printf("%d ", num);
        }
    }

    printf("\n");

    return 0;
}

以上代码分析:

  • 首先通过一个for循环遍历0到10000之间的所有整数。
  • 对于每个整数,先计算出它的位数(通过不断除以10并计数)。
  • 然后根据位数,如果是三位数就计算各位数字的立方和,如果是四位数就计算各位数字的四次方和。
  • 最后将计算得到的幂和与该数本身进行比较,若相等则输出该数,即为找到的水仙花数。

4. 输出

0 - 10000中的水仙花数为:
0 1 153 370 371 407 1634 8208 9474 

5. 优化

比如考虑是101-1000范围内的:

#include<stdio.h>

int main(void)
{
    int nNum, nRes, n, q;
    for(nNum = 101; nNum < 1000; nNum++)
    {
        nRes = 0;
        q = nNum;
        while(q != 0)
        {
            n = q % 10;
            nRes += n*n*n;
            q /= 10;
        }
        if(nRes == nNum)
            printf("%d是水仙花数\n", nNum);
    }
    return 0;
}

标签:10,digit,10000,temp,int,C语言,水仙花
From: https://blog.csdn.net/MrHHHHHH/article/details/144070480

相关文章

  • 24.10.29 系统命令补充
    echoecho回声在Linux中指输出指定内容到屏幕一般与重定向符号搭配使用(>>>)>重定向符号(标准输出重定向),先清空文件内容,然后再写入>>追加重定向符号(标准输出追加重定向),把内容追加到文件的末尾(类似于复制内容到文件)echo基本使用[root@oldboyedu~]#echooldboyoldboy......
  • PAT甲级-1043 Is It a Binary Search Tree
    题目题目大意给出一组二叉树的先序遍历,判断是否为二叉排序树或镜像二叉排序树。如果是,输出YES以及该树的后序遍历,如果不是,输出NO。思路刚开始写这道题,用的模拟,直接根据输入的序列构造二叉排序树,然后求该树的先序遍历,看是否和题目给出的序列相同。如果相同,则是二叉排序树......
  • 代码随想录算法训练营第十四天(统一迭代;LeetCode226.翻转二叉树;LeetCode101.对称二叉树
    统一迭代LeetCode144.二叉树的前序遍历题目链接:二叉树的前序遍历题目链接代码/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval)......
  • MATH1109 - CORE MATHEMATICS
    AUTUMNSEMESTER2024-2025MATH1109-COREMATHEMATICSPythonCourseworkDeadline:15:00,Wednesday27/11/2024RulesItisnotpermittedtousegenerativeartificialintelligence(AI)softwareforthiscoursework.Ensurethatyouhavereadandhaveunderstood......
  • 《民用建筑隔声设计规范》(GB 50118-2010)是中华人民共和国的国家标准,旨在指导民用建筑
    《民用建筑隔声设计规范》(GB50118-2010)是中华人民共和国的国家标准,旨在指导民用建筑的隔声设计,以确保建筑内部的居住和工作环境具备良好的声学条件,减少外界噪声干扰,提升建筑的舒适性与安全性。规范概述:标准编号:GB50118-2010发布单位:中华人民共和国住房和城乡建设部发布日期:201......
  • P10974 换根 dp 解题报告
    题目传送门题目大意:给定一颗无根树,有一个节点是源点,度数为\(1\)的点是汇点,树上的边有最大流量。除源点和汇点外,其它点不储存水,即流入该点的水量之和等于从该点流出的水量之和。整个水系的流量定义为原点单位时间内能发出的水量。现在需要求出:在流量不超过最大流量的前提下,选......
  • 【C语言】· 第五讲 · Printf 与 Scanf 学习笔记
    Printf与Scanf一、printf1、 基本⽤法printf()的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的f代表format(格式化),表⽰可以定制输出⽂本的格式。printf()不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏。为了让光标移到下⼀⾏的开头......
  • 中柏N100小主机入手使用问题记录,MiniPC驱动安装,功耗调整,BIOS设置
    中柏N00II简介双11在京东买的,439块,用了政府补贴。看到有其他人买到更低。等了10多天才到。有线网口:单千兆,Realtek。WiFi:IntelAC9560带蓝牙5.1显示接口:HDMIx1,Displayx1USB2.0x2,3.1x2拆机拆下,底部的四颗螺丝,有一个角有个伸缩拉手,拉以下就打开了。配的固态硬盘......
  • 语音 Agent 平台 PlayAI 融资 2100 万美元;英伟达音频模型 Fugatto:输入文本音频生成人
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 【YOLOv10基础[论文必备]】计算已训模型的FPS值、计算每张随机图片的平均推理时间
    本文给大家带来的是计算已训模型的FPS值、计算每张随机图片的平均推理时间,本文的内容是十分有用的,论文必备。一FPS......