【寒假每日一题】DAY1.水仙花数

news/2024/11/27 23:44:18/

一、题目描述

求0~100000之间的所有“水仙花数”并输出。

什么是水仙花数:

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

思路:

第一步:根据题目要求产生0~100000的数字【循环就能搞定】

若想知道一个数是否为水仙花数

第二步:首先需要判断这个数(i)有几位数(用cnt统计)

第三步:计算 i 十进制的每一位与cnt的次方之和(sum)

第四步:判断这个数是否与sum相等,如果相等则输出 i

根据思路一起来敲代码吧

第一步:产生0~100000的数字

#include <stdio.h>
int main()
{//产生0~100000的数字for (int i = 0; i <= 100000; i++){}return 0;
}

第二步:判断 i 有几位数

让 i 循环除10,然后让cnt++,但需要注意的是,要创建一个变量来代替 i,因为 i 循环除10会改变 i 的值,最后就不能判断 i 是否等于sum

#include <stdio.h>
int main()
{//产生0~100000的数字for (int i = 0; i <= 100000; i++){//第二步:判断 i 有几位数int cnt = 0; //统计 i 有几位数int tmp = i; while (tmp){tmp /= 10;cnt++;}}return 0;
}

第三步:计算 i 十进制的每一位与cnt的次方之和(sum)

这里还需要把 i 再次赋值给tmp,因为tmp在上一步已经变成了0

#include <stdio.h>
#include <math.h>
int main()
{//第一步:产生0~100000的数字for (int i = 0; i <= 100000; i++){//第二步:判断 i 有几位数int cnt = 0; //统计 i 有几位数int tmp = i; while (tmp){tmp /= 10;cnt++;}//第三步:计算 i 十进制的每一位与cnt的次方之和tmp = i;int sum = 0;while (tmp){//产生 i 的最后一位int a = tmp % 10;//计算每一位与cnt的次方之和sum += pow(a, cnt); //pow函数需要包含math.h头文件//去掉 i 最后一位tmp /= 10;}}return 0;
}

第四步:判断这个数是否与sum相等,如果相等则输出 i

这个就非常简单啦

#include <stdio.h>
#include <math.h>
int main()
{//第一步:产生0~100000的数字for (int i = 0; i <= 100000; i++){//第二步:判断 i 有几位数int cnt = 0; //统计 i 有几位数int tmp = i; while (tmp){tmp /= 10;cnt++;}//第三步:计算 i 十进制的每一位与cnt的次方之和tmp = i;int sum = 0;while (tmp){//得到 i 的最后一位int a = tmp % 10;//计算每一位与cnt的次方之和sum += pow(a, cnt); //pow函数需要包含math.h头文件//去掉 i 最后一位tmp /= 10;}//第四步:判断这个数是否与sum相等if (i == sum){printf("%d ", i);}}return 0;
}

程序运行结果:


但是这串代码的逻辑还是有点小问题,当i = 0时,tmp也为0,0为假,不进入循环,但是0也算一位数啊

所以可以这么改

#include <stdio.h>
#include <math.h>
int main()
{//第一步:产生0~100000的数字for (int i = 0; i <= 100000; i++){//第二步:判断 i 有几位数int cnt = 1; //统计 i 有几位数int tmp = i; while (tmp > 9){tmp /= 10;cnt++;}//第三步:计算 i 十进制的每一位与cnt的次方之和tmp = i;int sum = 0;while (tmp){//产生 i 的最后一位int a = tmp % 10;//计算每一位与cnt的次方之和sum += pow(a, cnt); //pow函数需要包含math.h头文件//去掉 i 最后一位tmp /= 10;}//判断这个数是否与sum相等if (i == sum){printf("%d ", i);}}printf("\n");return 0;
}

先把cnt赋值成1,因为0~100000无论怎么样,最少都会有一位数;tmp>9,意思是超过2位数就进入循环

程序运行结果:

                                                                                                               2023年1月9日


http://www.ppmy.cn/news/10912.html

相关文章

STM32 TIM PWM高阶操作:刹车及状态约束

STM32 TIM PWM高阶操作&#xff1a;刹车及状态约束 刹车及状态约束是STM32 TIM PWM控制里面比较复杂的一部分&#xff0c;涉及到PWM波形产生前&#xff0c;中&#xff0c;后的管脚状态输出。 这里先引入两个描述&#xff0c;一个是“半高阻”&#xff0c;意思是STM32管脚输出…

vue+xlsx实现表格的导入导出:

文章目录一、vue前端使用xlsx和 xlsx-style 导出excel&#xff0c;并修改样式:1、改造后效果&#xff1a;2、实现&#xff1a;3、引入库xlsx-style4、excelUtil.js文件二、前端xlsx插件怎么设置导出的excel列宽自适应&#xff1f;2-1、效果2-2、效果三、xlsx插件&#xff0c;导…

元年科技2022回顾:奋楫扬帆数字化,转型升级立潮头

当下数字经济无疑以最具创新、辐射力最广泛的经济形态迸发着无限活力&#xff0c;这也意味着数字化转型的浪潮风起云涌。作为数字化转型的主力军&#xff0c;元年科技肩负重任奋楫扬帆&#xff0c;在沧海中勇往直前。 回顾2022年&#xff0c;元年科技在不断走向深入的数字化转…

Vue3——第四章(响应式基础:reactive、ref)

一、用reactive()声明响应式状态 我们可以使用 reactive() 函数创建一个响应式对象或数组&#xff1a; 响应式对象其实是 JavaScript Proxy&#xff0c;其行为表现与一般对象相似。不同之处在于 Vue 能够跟踪对响应式对象属性的访问与更改操作。 要在组件模板中使用响应式状…

【Linux】Linux 项目自动化构建工具 -- make/makefile

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;Linux 文章目录一、前言二、概念三、demo 实现四、原理与规则1、依赖关系和依赖方法① 感性理解② 深层理解…

计算机网络培训总结

在11月份我参加了这次计算机网络培训&#xff0c;虽然这次计算机网络培训的时间很短&#xff0c;但对我来说受益匪浅,充分认识到了自己在计算机应用与网络方面存在很多不足。培训使我的眼界开阔了、思考问题的角度改变了&#xff0c; 许多疑问得到了解决或者启发。 作为一名信息…

STL空间配置器框架分析

目录 一、空间配置器概念 二、空间配置器的作用 三、内存池技术 四、空间配置器的实现原理 3.1 流程概述 3.2 一级空间配置器 3.3 二级空间配置器 3.3.1 二级空间配置器设计 3.3.2 内存碎片问题 一、空间配置器概念 即为各个容器高效的管理空间(空间的申请与回收)的。…

分享48个Go源码,总有一款适合您

Go源码 分享48个Go源码&#xff0c;总有一款适合您 Go源码下载链接&#xff1a;https://pan.baidu.com/s/1FhQ6NzB3TWsv9res1OsJaA?pwdr2d3 提取码&#xff1a;r2d3 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;…