【重生之学习C语言----水仙花篇】
目录
编辑
----------------------------------------begin--------------------------------------
一、什么是水仙花数?
二、问题分析
确定数字的位数:计算输入数字的位数 n。
分离每一位数字:例如将 153 分离为 1、5、3。
计算各位的n次方和:将每一位的 n 次方相加。
判断是否相等:比较和与原数是否相等。
三、算法设计
计算位数:
分离每一位:
计算次方和:
判断逻辑:
四、代码实现
完整代码:
代码解析:
五、运行结果
六、关键问题与优化
为什么从100开始遍历?
如何处理更大的数字?
手动实现幂运算(避免依赖 math.h):
七、总结
路过的佬们点点关注哦~
你们的鼓励是我前进的动力~
----------------------------------------------end------------------------------------------
----------------------------------------begin--------------------------------------
一、什么是水仙花数?
水仙花数(Narcissistic Number),又称阿姆斯特朗数,是指一个 n 位数的正整数,其各位数字的 n 次方之和等于它本身。例如:
-
153 是3位水仙花数:13+53+33=15313+53+33=153
-
9474 是4位水仙花数:94+44+74+44=947494+44+74+44=9474
二、问题分析
要实现水仙花数的判断,需要解决以下问题:
-
确定数字的位数:计算输入数字的位数
n。 -
分离每一位数字:例如将
153分离为1、5、3。 -
计算各位的n次方和:将每一位的
n次方相加。 -
判断是否相等:比较和与原数是否相等。
三、算法设计
-
计算位数:
-
通过循环除以10统计次数,直到数字变为0。
-
-
分离每一位:
-
使用取模(
% 10)获取最后一位,再通过整除(/ 10)移除该位。
-
-
计算次方和:
-
调用
math.h中的pow函数,或手动实现幂运算。
-
-
判断逻辑:
-
如果次方和等于原数,则为水仙花数。
-
四、代码实现
-
完整代码:
#include <stdio.h>
#include <math.h>int isNarcissistic(int number) {int original = number;int sum = 0;int digits = 0;int temp = number;// 计算位数while (temp != 0) {temp /= 10;digits++;}// 恢复原始值temp = original;// 计算各位的次方和while (temp != 0) {int remainder = temp % 10;sum += pow(remainder, digits);temp /= 10;}// 判断是否相等return (sum == original);
}int main() {int lower = 100; // 水仙花数至少是三位数int upper = 9999; // 示例范围扩大到四位数printf("水仙花数(%d - %d):\n", lower, upper);for (int i = lower; i <= upper; i++) {if (isNarcissistic(i)) {printf("%d\n", i);}}return 0;
}
-
代码解析:
-
isNarcissistic函数:-
计算位数:通过
while循环统计除以10的次数。 -
分离各位数字:通过
% 10取余和/ 10整除操作。 -
次方和计算:使用
pow(remainder, digits)计算每位数字的n次方。
-
-
main函数:-
遍历指定范围(如100-9999)内的所有数字。
-
调用
isNarcissistic判断是否为水仙花数并输出。
-
五、运行结果
水仙花数(100 - 9999):
153
370
371
407
1634
8208
9474
六、关键问题与优化
-
为什么从100开始遍历?
-
水仙花数至少是三位数(如153),两位数无法满足条件。
-
-
如何处理更大的数字?
-
调整
upper的值即可,但需注意数据溢出问题(int类型上限约为 231−1231−1)。
-
-
手动实现幂运算(避免依赖
math.h):
int power(int base, int exponent) {int result = 1;for (int i = 0; i < exponent; i++) {result *= base;}return result;
}
七、总结
通过本博客,你学会了:
-
水仙花数的定义与数学原理。
-
分步骤算法设计:计算位数、分离数字、次方求和。
-
C语言实现技巧:循环、条件判断、函数封装。
-
扩展思路:如何优化代码、处理更大范围的数字。
动手挑战:尝试修改代码,找出所有5位水仙花数(如54748),并在评论区分享你的结果!
路过的佬们点点关注哦~
你们的鼓励是我前进的动力~
----------------------------------------------end------------------------------------------
相关文章:
【重生之学习C语言----水仙花篇】
目录 编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...
两步构建 AI 总结助手,实现智能文档摘要
在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。…...
承压金字塔(蓝桥杯17C)
文件读取,与写入:C 文件和流 | 菜鸟教程 #include <iostream> #include <fstream> #include <string> using namespace std; double sum[30][30]; int main() {ifstream infile("C:\\Users\\xutianci\\OneDrive\\Desktop\\TMOCC\…...
day33-数据同步rsync
一、Rsync本地模式和远程模式 纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B 也就是模拟cp的用法 很简单 1.安装 yum install rsync -y 2.命令语法,分几个模式 - 本地模式 rsync 参数 源路径 目标路径 rsync -xxxxx /var…...
Android 实现首页Tab切换并且支持懒加载功能详解
目录 1. 添加依赖2. 布局文件3. 创建 Fragment4. 创建适配器5. 在 MainActivity 中设置 TabLayout 和 ViewPager2 1. 添加依赖 在 build.gradle 文件中添加以下依赖: implementation androidx.viewpager2:viewpager2:1.1.0-beta01 implementation com.google.andr…...
[Android] 360行车记录仪谷歌版
[Android] 360行车记录仪谷歌版 链接:https://pan.xunlei.com/s/VOIQYq-jmW8Jpb8y3EIA3YdtA1?pwd3abw# 新买的360行车记录仪,配套软件让安装360智慧生活软件,二百多兆,各种功能齐全、忒齐全,好多用不到,…...
基于Redis分布式锁
1. 获取锁的过程 使用SETNX命令:SETNX(SET if Not eXists)是一个原子操作,它会在指定的key不存在时,将key的值设置为给定的value,并返回1;如果key已经存在,则不做任何操作࿰…...
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
在 Spring Boot 项目中,有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时,ConditionalOnProperty 注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载,使得我们的程序更具灵活性。 本…...
canny边缘检测
Canny边缘检测算法是一种广泛使用的边缘检测方法,由John F.Canny在1986年提出。它被认为是边缘检测的“黄金标准”,因为它在检测边缘的同时能够很好地抑制噪声,并且能够精确地定位边缘。Canny算法通过一系列步骤来实现鲁棒的边缘检测…...
团建 蓝桥杯省a 15
问题描述 小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 nn 和 mm 的树,树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点,从根到这个叶结点的路径上经过的所…...
【逻辑学导论】1.6 有效性和真实性
当一个演绎论证成功地将结论和前提必然地联系起来,它是有效的。有效性是针对论证的各命题之间的关系而言的。一个论证是有效的,当且仅当它不可能有真前提和假结论,当且仅当其结论是从其前提逻辑必然地推导出来的。因此,有效性永远…...
IDEA 中集成 Maven,配置环境、创建以及导入项目
目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...
Qt跨屏窗口的一个Bug及解决方案
如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio…...
Vue WebSocket简单应用 ws
webSocket应用 <template><div></div> </template><script> import { getToken } from "/utils/auth"; export default {data() {return {url: "",Socket: null, //socket对象lockReconnect: false, //锁定拒绝重连close: …...
快速单机部署ollama v0.5.7 +openwebui(免去网络环境干扰)
1 概述 本文介绍在一台机器上快速部署测试ollama和openwebui,免去国内网络环境的干扰。 2 环境 2.1 环境 版本信息如下: a、操作系统:centos 7.9 c、docker版本:20.10.5-3 3 部署 3.1 安装docker yum install -y yum-util…...
【华为OD-E卷 - 114 找最小数 100分(python、java、c++、js、c)】
【华为OD-E卷 - 找最小数 100分(python、java、c、js、c)】 题目 给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果,需要使得NUM2的值最小 输入描述 输入的第一行为一个字符串,字…...
快速搭建GPU环境 | docker、k8s中使用gpu
目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件: GPU DriverCUDA Toolkit 二者的关…...
VSCode设置——通过ctrl+鼠标滚动改变字体大小(新版本的vs)
"editor.mouseWheelZoom": true 第一步: 第二步:...
【kafka实战】06 kafkaTemplate java代码使用示例
在 Spring Boot 中使用 KafkaTemplate 可以方便地向 Kafka 发送消息。下面为你详细介绍使用步骤和示例代码。 1. 创建 Spring Boot 项目 你可以使用 Spring Initializr(https://start.spring.io/ )来创建一个新的 Spring Boot 项目,添加以下…...
Java 23新特性
文章目录 Java 23新特性一、引言二、Markdown文档注释(JEP 467)示例 三、ZGC:默认的分代模式(JEP 474)1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法(JE…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...
