当前位置: 首页 > news >正文

【重生之学习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 分离为 153
  • 计算各位的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;
}

七、总结

通过本博客,你学会了:

  1. 水仙花数的定义与数学原理。

  2. 分步骤算法设计:计算位数、分离数字、次方求和。

  3. C语言实现技巧:循环、条件判断、函数封装。

  4. 扩展思路:如何优化代码、处理更大范围的数字。


动手挑战:尝试修改代码,找出所有5位水仙花数(如54748),并在评论区分享你的结果!

路过的佬们点点关注哦~

你们的鼓励是我前进的动力~

----------------------------------------------end------------------------------------------

相关文章:

【重生之学习C语言----水仙花篇】

目录 ​编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数&#xff1f; 二、问题分析 确定数字的位数&#xff1a;计算输入数字的位数 n。 分离每一位数字&#xff1a;例如将 153 分离为 1、5、3。 计算各…...

两步构建 AI 总结助手,实现智能文档摘要

在信息极度丰富的当下&#xff0c;如何从海量且复杂的文件资料中筛选出关键内容&#xff0c;成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍&#xff0c;如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手&#xff0c;实现高效的文本自动总结和信息提取。…...

承压金字塔(蓝桥杯17C)

文件读取&#xff0c;与写入&#xff1a;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的命令&#xff0c;来实现&#xff0c;数据目录A 拷贝到数据目录B 也就是模拟cp的用法 很简单 1.安装 yum install rsync -y 2.命令语法&#xff0c;分几个模式 - 本地模式 rsync 参数 源路径 目标路径 rsync -xxxxx /var…...

Android 实现首页Tab切换并且支持懒加载功能详解

目录 1. 添加依赖2. 布局文件3. 创建 Fragment4. 创建适配器5. 在 MainActivity 中设置 TabLayout 和 ViewPager2 1. 添加依赖 在 build.gradle 文件中添加以下依赖&#xff1a; implementation androidx.viewpager2:viewpager2:1.1.0-beta01 implementation com.google.andr…...

[Android] 360行车记录仪谷歌版

[Android] 360行车记录仪谷歌版 链接&#xff1a;https://pan.xunlei.com/s/VOIQYq-jmW8Jpb8y3EIA3YdtA1?pwd3abw# 新买的360行车记录仪&#xff0c;配套软件让安装360智慧生活软件&#xff0c;二百多兆&#xff0c;各种功能齐全、忒齐全&#xff0c;好多用不到&#xff0c;…...

基于Redis分布式锁

1. 获取锁的过程 使用SETNX命令&#xff1a;SETNX&#xff08;SET if Not eXists&#xff09;是一个原子操作&#xff0c;它会在指定的key不存在时&#xff0c;将key的值设置为给定的value&#xff0c;并返回1&#xff1b;如果key已经存在&#xff0c;则不做任何操作&#xff0…...

Spring Boot 条件注解:@ConditionalOnProperty 完全解析

在 Spring Boot 项目中&#xff0c;有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。此时&#xff0c;ConditionalOnProperty 注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载&#xff0c;使得我们的程序更具灵活性。 本…...

canny边缘检测

Canny边缘检测算法是一种广泛使用的边缘检测方法&#xff0c;由John F.Canny在1986年提出。它被认为是边缘检测的“黄金标准”&#xff0c;因为它在检测边缘的同时能够很好地抑制噪声&#xff0c;并且能够精确地定位边缘。Canny算法通过一系列步骤来实现鲁棒的边缘检测&#xf…...

团建 蓝桥杯省a 15

问题描述 小蓝正在和朋友们团建&#xff0c;有一个游戏项目需要两人合作&#xff0c;两个人分别拿到一棵大小为 nn 和 mm 的树&#xff0c;树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点&#xff0c;从根到这个叶结点的路径上经过的所…...

【逻辑学导论】1.6 有效性和真实性

当一个演绎论证成功地将结论和前提必然地联系起来&#xff0c;它是有效的。有效性是针对论证的各命题之间的关系而言的。一个论证是有效的&#xff0c;当且仅当它不可能有真前提和假结论&#xff0c;当且仅当其结论是从其前提逻辑必然地推导出来的。因此&#xff0c;有效性永远…...

IDEA 中集成 Maven,配置环境、创建以及导入项目

目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...

Qt跨屏窗口的一个Bug及解决方案

如果我们希望一个窗口覆盖用户的整个桌面&#xff0c;此时就要考虑用户有多个屏幕的场景&#xff08;此窗口要横跨多个屏幕&#xff09;&#xff0c;由于每个屏幕的分辨率和缩放比例可能是不同的&#xff0c;Qt底层在为此窗口设置缩放比例&#xff08;DevicePixelRatio&#xf…...

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&#xff0c;免去国内网络环境的干扰。 2 环境 2.1 环境 版本信息如下&#xff1a; a、操作系统&#xff1a;centos 7.9 c、docker版本&#xff1a;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分&#xff08;python、java、c、js、c&#xff09;】 题目 给一个正整数NUM1&#xff0c;计算出新正整数NUM2&#xff0c;NUM2为NUM1中移除N位数字后的结果&#xff0c;需要使得NUM2的值最小 输入描述 输入的第一行为一个字符串&#xff0c;字…...

快速搭建GPU环境 | docker、k8s中使用gpu

目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件&#xff1a; GPU DriverCUDA Toolkit 二者的关…...

VSCode设置——通过ctrl+鼠标滚动改变字体大小(新版本的vs)

"editor.mouseWheelZoom": true 第一步&#xff1a; 第二步&#xff1a;...

【kafka实战】06 kafkaTemplate java代码使用示例

在 Spring Boot 中使用 KafkaTemplate 可以方便地向 Kafka 发送消息。下面为你详细介绍使用步骤和示例代码。 1. 创建 Spring Boot 项目 你可以使用 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;来创建一个新的 Spring Boot 项目&#xff0c;添加以下…...

Java 23新特性

文章目录 Java 23新特性一、引言二、Markdown文档注释&#xff08;JEP 467&#xff09;示例 三、ZGC&#xff1a;默认的分代模式&#xff08;JEP 474&#xff09;1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法&#xff08;JE…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...