【C语言】水仙花数

news2024/11/15 18:01:38

问题

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数或阿姆斯壮数数(Armstrong number)。

它是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:1^3 + 5^3 + 3^3 = 153,则153是一个水仙花数。对于三位数,水仙花数有153、370、371、407四个数。

这里我们扩大一点范围,假设水仙花数也可以小于三位数,只要一个n位数各位数字的n次方之和确好等于该数本身,我们就认为它是水仙花数,那么现在我们求出0~100000之间的所有“水仙花数”并输出。

整体分析

我们可以拆分一下我们到底要做哪几件事,就像你现在要煮一碗拉面,你可以将整个过程拆分为去买菜、备菜、煮面、吃、洗碗。解决这个问题,我们可以拆成生成0~100000的数组,求每个数是几位数(此时假设位数为n),求每个位上的数字的n次方之和(还可以进一步细分为求每位的n次方、求和两个动作),判断是否是水仙花数、打印这几件事。

具体分析

首先,生成0~100000的数字,这是最简单的,只需要一个循环语句:

int main()
{
   int i = 0;
	   for(i=0; i<100000; i++)
	   {
           //具体的:计算位数n、求各位n次方和、判断是否为水仙花数和打印
       }
   return 0;
}

现在,我们就有了最外层的框架。

求几位数

怎么样才能得到这个数是几位数呢?这里我们可以用一种办法,我们知道,‘/’是整除,所以一个数/10的结果是去掉了最低位:

int a = 123;
int a = a/10;//将a整除10的结果重新赋值给a,现在a的值变为了12

那么,我们可以循环这个过程,定义一个变量count初始化为0,让我们的i每次/10后都count++,当i等于0的时候整除停止,此时我们得到的count就是位数:

看完这个图你一定就理解了吧。

得到各位上数字的count次方和

怎么做到这一点呢?我们知道一个数%10得到的就是最低位上的那个数字…等下,你不知道为什么?那我先浅浅讲解一下,已经知道的朋友可以跳过这段:

C语言中的%符号有两种主要用法:作为格式化字符串中的占位符和作为取模运算符,我们这里用到的是后一种。

%用作取模运算符时,表示整数除法的余数。例如,result = a % b; 计算的是 a 除以 b 的余数,并将结果赋值给 result。

使用%d时,确保对应的变量是整数类型(int),如果是长整型(long)则使用%ld或%Ld,短整型(short)使用%hd。

在进行取模运算时,要注意除数不能为零,否则会导致程序运行错误。

那么为什么一个数%10得到的就是最低位上的那个数字呢?我们这里说的“一个数”指的是十进制表示的一个数。%计算的是除之后的余数,%10就是除10后的余数,因为是十进制,所以剩在最低位上的就是无法达到10从而进位的数,所以也就是%10的余数。

这么说,应该能够理解了吧。

但是一次%10我们只能得到一个数字最低位的数啊,怎样才能把每一位的数字都拿到呢?其实我们的“武器”还是循环。而且我们还要借助上面刚提过的/10,因为将一个数/10就是整除10,而效果就是去掉了最低位,所以我们拿到一位、去掉一位、再拿一位、再去一位,不就能从低到高拿到每一位了吗?

既然我们要拿到每一位,并且要求它们的count次方的和,这时我们就创建一个变量sum,用来每轮循环存放这一位n次方的值,随着循环进行累加。

在C语言中我们想要求一个数的几次方,我们需要用到一个函数叫做pow,它的头文件为math.h,它所需的两个参数前者就是要求次方的数,后者就是几次方。

在了解这些后我们就能写出这个循环:

while (i)
{
	sum += pow(i % 10, count);
	i = i / 10;
}
陷阱

但是我的朋友,你先别高兴得太早,以上的代码其实有一个很难察觉的陷阱,这也是我在调试之后才找出来的:

对于后面这个求次方和的代码来说,此时的i在经过前一个循环后已经变成0而不是它原本的数字了。 那么我们根本都无法进入后面这个循环。其实,到最后判断的时候我们还要用到一次i的原始值。

那么怎么解决这个问题呢?

其实解决办法很简单,我们的目标就是不去改动i的值,那么我们只要在一开始就把i的值先赋给一个变量,并且在它需要变回i的值的时候,把i再赋一次给它就行了。所以以上两个循环应该改为:

for (i = 0; i < 100000; i++)
{
    
    int sum = 0;//这个要写在里面,否则对于每一个要检测的i来说,sum就不是从零开始了
	int count = 0;//这个也要写里面,理由同上。

	int tmp = i;//tmp接受i真正的值,替i进行变化,不用改动i

	while (tmp)
	{
		count++;
		tmp = tmp / 10;
	}

    tmp = i;//让tmp重新变回i的值

	while (tmp)
	{
		sum += pow(tmp % 10, count);
		tmp = tmp / 10;
	}
}
最终判断

现在,几位数(count)有了,各位上数字的count次方和有了,我们只需要拿和与我们的i进行比较判断就行了:

if (sum == i)
	printf("%d ", i);

完整代码参考:

在vs2022上运行效果:

那么,本篇博客内容到此就结束了,希望大家看完发现问题向我反馈,共同进步! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐系统学习笔记(一)

A/B测试 随机分桶--哈希函数随机分 如果某个实验组指标明显优于对照组&#xff0c;则值得推全 分层实验 问题&#xff1a;流量不够用怎么办&#xff1f; 同层互斥----避免一个用户被两个实验影响 不同层正交----每层独立随机分配用户 为什么不能全都用正交&#xff1f; 同…

【机器学习:IT行业的现在与未来】技术应用与趋势探索

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f381; 引言&#x1f300; 当前机器学习技术的深度剖析与实践展示&#x1f3af; 算法与架构的革新轨迹&#x1f4c8; 数据科学与基础设施的融合进化&#x1f512; 安全、隐私与伦理&#xff1a;技术的道德指南针&…

【Maven】简介_下载安装

1.maven简介 项目管理工具项目对象模型 project object model (POM) 一个项目&#xff1a;清理、编译、测试、打包、发布、部署 1.1 为什么需要使用maven 组装机和品牌机的概念IDE &#xff08;集成开发环境&#xff09;不是万能的依赖大量的手工操作&#xff0c;编译、测试、…

Odin:免费轻量化BAS工具,守护企业网络安全新利器!

墨云科技依托多年安全验证经验积累&#xff0c;推出免费轻量化安全验证工具——Odin。墨云Odin安全验证工具从设计上极大的简化了BAS的任务流程&#xff0c;专为企业持续安全运营设计&#xff0c;提供轻量化、全方位的安全策略有效性验证。 Odin提供综合攻击模拟服务&#xff0…

scratch求和 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch求和 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、pytho…

Spring MVC(一)

1 Spring MVC概述 我们在之前学习Servlet的时候&#xff0c;认识了在WEB开发中MVC设计模式&#xff0c;其最为经典的设计就是&#xff0c;通过控制器&#xff08;Controller&#xff09;分离模型&#xff08;Model&#xff09;和视图&#xff08;View&#xff09;。在具体的WEB…

【408精华知识】计算机系统结构

感觉教材和网络上对于计算机系统的结构描述都比较模糊&#xff0c;我自己对其进行了总结&#xff0c;并且画出图&#xff0c;不过因为学习的还是不够深入和全面&#xff0c;有的地方肯定是有问题的&#xff0c;烦请大家批评指正&#xff0c;我会进行修改~ 文章目录 零、结构图总…

OpenAI 新发布的 GPT-4o,有血有肉的Ai来了,可实时语音视频交互

今天&#xff0c;OpenAI又又又开发布会了。 在大众心里&#xff0c;现在也基本上都知道&#xff0c;奥特曼是一个贼能PR的人。 每一次的PR的时间点&#xff0c;都拿捏的极其到位&#xff0c;精准的狙击其他厂商。比如说上一次Sora&#xff0c;其实你会发现从头到尾就是一个PR的…

中腾食品上海食堂承包创新食堂空间,构建企业第三文化沙龙

在快节奏的现代职场生活中&#xff0c;企业食堂已不再是简单的餐饮供应地&#xff0c;而是逐渐演变成为员工休息休闲、互动体验、阅读思考的重要场所。中腾国际团餐产业集团通过专业的定制化食堂承包&#xff0c;在企业食堂内部打造企业第三文化空间&#xff0c;为员工提供一个…

基于ProxySQL中间件实现MySQL的读写分离

目录 ProxySQL简介 ProxySQL安装 配置YUM仓库 YUM安装 关于读写分离的实现 集群信息 测试读写分离 测试总结 ProxySQL Configuration CLI ProxySQL简介 ProxySQL是一个高性能的MySQL协议代理&#xff0c;它支持多种数据库后端&#xff0c;包括Amazon Aurora、RDS、Cl…

外卖订餐总后台系统原型

页面数量&#xff1a;共 210 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10 应用领域&#xff1a;O2O领域、网上订餐、外卖行业 文章展示不够全面&#xff0c;如有兴趣请联系作者 该原型作品为外卖订餐总后台管理系统&#xff0c;定位偏向美团外卖与饿了么一…

unapp写微信小程序封装水印相机组件怎么实现?

<template><view><!-- <cu-custom bgColor"bg-gradual-blue" :isBack"true"><block slot"backText">返回</block><block slot"content">编辑资料</block></cu-custom> --><…

让大模型更贴近人类认知水平,上海AI实验室发布首个因果推理评测体系CaLM

近日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合同济大学、上海交通大学、北京大学及商汤科技发布首个大模型因果推理开放评测体系及开放平台CaLM&#xff08;Causal Evaluation of Language Models&#xff0c;以下简称“CaLM”&#xff09;。首…

MySQL:MySQL索引结构为什么选用B+树?

一、前言 当我们发现SQL执行很慢的时候&#xff0c;自然而然想到的就是加索引。在MySQL中&#xff0c;无论是Innodb还是MyIsam&#xff0c;都使用了B树作索引结构。我们知道树的分类有很多&#xff0c;MySQL中使用了B树作索引结构&#xff0c;这是为什么呢&#xff1f; 本文将从…

HOJ 修改首页 和后端logo图片 网页收藏标识ico 小白也会的方法

HOJ 是一款优雅知性的在线评测系统&#xff0c;像一位温文尔雅的女性&#xff0c;你会慢慢喜欢上她的。 制作图片素材 用图像编辑软件 比如 **光影魔术手4.0** 制作以下素材 logo.a0924d7d.png 为前台导航栏左边的logo&#xff0c; 600*200 backstage.8bce8c6e.png 为后台侧…

虚拟化技术 在vCenter Server创建数中心、添加主机

一、实验内容 1.安装Flash 2.在vCenter Server创建数中心、添加主机 二、实验主要仪器设备及器材 1.安装有64位Windows操作系统的台式电脑或笔记本电脑&#xff0c;建议4C8G或以上配置 2.在Windows Server 2008 R2已安装vCenter Server 3.Adobe Flash Player 12.0.0.70.e…

数据结构【顺序表】

文章目录 1.顺序表的概念线性表物理结构逻辑结构 2.顺序表的分类2.1静态顺序表2.2动态顺序表 3.顺序表接口的实现头文件(SQList.h)如下源文件初始化顺序表销毁顺序表插入扩容尾插头插 封装扩容函数删除尾删头删 查找元素在指定位置前插入数据情况一(指定的位置不是首元素)情况二…

CMF认证是什么?怎么报名?考试费用多少?有必要参加培训吗?

CMF认证是由国际变革管理学院&#xff08;CMI&#xff09;颁发的一种认证&#xff0c;旨在评估个人在变革管理领域的知识和技能&#xff0c;并确认其在该领域具备专业能力。通过学习和理解变革管理知识体系&#xff08;CMBoK&#xff09;&#xff0c;参与者可以掌握变革管理的理…

4 特征构造

4 特征构造 学习目标 知道未来信息的概念,及处理未来信息的方法掌握从原始数据构造出新特征的方法掌握特征变换的方法掌握缺失值处理的方法1 数据准备 1.1 梳理数据的内在逻辑 关系种类 一对一:一个用户有一个注册手机号 一对多:一个用户多笔借款 多对多:一个用户可以…

第1章 初始Spring Boot【仿牛客网社区论坛项目】

第1章 初始Spring Boot【仿牛客网社区论坛项目】 前言推荐项目总结第1章初识Spring Boot&#xff0c;开发社区首页1.课程介绍2.搭建开发环境3.Spring入门体验IOC容器体验Bean的生命周期体验配置类体验依赖注入体验三层架构 4.SpringMVC入门配置体验响应数据体验响应Get请求体验…