【JS】判断快乐数

思路

这里主要是需要熟悉对取值各个位数上的单数操作,也就是数字拆分方法:

  • 转化为字符串,使用split方法
// 将数字转换为字符串,以便拆分为单个数字
let arr = ('' + (totalCount || n)).split('');
  • 使用数学运算符
   let sum = 0; // 初始化 sum 为 0while (n) { // 当 n 不为 0 时循环sum += (n % 10) ** 2; // 将 n 的最后一位数字平方后加到 sum 上n = Math.floor(n / 10); // 去掉 n 的最后一位数字}

步骤(方法一)

  1. 初始化:创建一个空的集合(Set),用于存储每个数字的平方和,以检测是否出现循环。

  2. 计算平方和:将给定的数 n 转换为字符串,然后转换回数字数组,计算每个数字的平方和。

  3. 循环检测

    • 使用一个 while 循环,条件是未达到快乐数的终点(即平方和不等于 1)。
    • 在每次循环中,计算当前数字的平方和。
    • 如果计算出的平方和已经存在于集合中,说明已经进入循环,因此该数不是快乐数,返回 false
    • 如果平方和不在集合中,则将其添加到集合中,并更新当前数字为计算出的平方和。
  4. 检查结果:如果平方和达到 1,则该数是快乐数,返回 true

  5. 结束循环:如果循环正常结束(即没有检测到循环且平方和达到 1),则认为数 n 是快乐数。

题目

示例代码

//方法一
var isHappy = function(n) {let set = new Set();  // 创建一个Set,用于存储遍历过程中的数字,以便检测循环let totalCount;  // 开始循环,直到totalCount达到1while(totalCount !== 1) {// 如果totalCount未定义,则使用n,否则使用totalCount// 将数字转换为字符串,以便拆分为单个数字,split返回数组let arr = ('' + (totalCount || n)).split('');// 使用reduce方法计算数组arr中所有数字平方的和// total为累加器,num为当前数字// 箭头函数:计算每个数字的平方并累加totalCount = arr.reduce((total, num) => total + num ** 2, 0);// 如果set中已经存在totalCount,则说明已经出现过这个数字,陷入循环,返回falseif (set.has(totalCount)) {return false;}// 将当前的totalCount添加到set中,用于下一次循环的检测set.add(totalCount);}// 如果循环正常结束,说明最终totalCount达到1,返回truereturn true;
};//方法二
// 定义函数 getSum,用于计算一个数各位数字的平方和
var getSum = function (n) {let sum = 0; // 初始化 sum 为 0while (n) { // 当 n 不为 0 时循环sum += (n % 10) ** 2; // 将 n 的最后一位数字平方后加到 sum 上n = Math.floor(n / 10); // 去掉 n 的最后一位数字}return sum; // 返回各位数字的平方和
};// 定义函数 isHappy,用于判断一个数是否是快乐数
var isHappy = function(n) {let set = new Set(); // 创建一个 Set 用于存储遍历过程中的数字,以便检测循环// 当 n 不是 1 并且 n 还没有出现在 Set 中时循环while (n !== 1 && !set.has(n)) {set.add(n); // 将 n 添加到 Set 中n = getSum(n); // 用 getSum 函数计算 n 的各位数字的平方和,更新 n 的值}// 如果 n 等于 1,说明已经找到快乐数,返回 true。否则,说明陷入了循环,返回 false。return n === 1;
};

欢迎指正! 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十二天|回溯算法| 理论基础,77. 组合(剪枝),216. 组合总和III,17. 电话号码的字母组合

目录 回溯算法理论基础 1.题目分类 2.理论基础 3.回溯法模板 补充一个JAVA基础知识 什么时候用ArrayList什么时候用LinkedList 77. 组合 未剪枝优化 剪枝优化 216. 组合总和III 17. 电话号码的字母组合 回溯法的一个重点理解:细细理解这句话!…

《Linux从小白到高手》理论篇:Linux的进程管理详解

本篇将介绍Linux的进程管理相关知识,并将深入介绍Linux的进程间相互通信。 进程就是运行中的程序,一个运行着的程序,可能有多个进程。 比如Oracle DB,启动Oracle实例服务后,就会有多个进程。 Linux进程分类 在 Linux…

五、Python基础语法(程序的输入和输出)

一、输入 输入:输入就是获取键盘输入的数据,使用input()函数。代码会从上往下执行,当遇到input()函数,就会暂停执行,输入内容后,敲回车键,表示本次的输入结束。input函数得到的数据类型都是字符…

Kali Linux中安装配置影音资源下载神器Amule

一、Debian系列Linux安装amule命令: sudo apt update sudo apt-get install amule amule-utils 二、配置Amule的要点: 1、首次运行Amule,提示是否下载服务器列表,点击是。 2、搜索选项的类型选择全球,类型的默认选项…

cs61b学习 part3

如果你有许多list,这里将会是大量的时间,我指的是对于单向链表查找时间复杂度O(N)相对于数组O(1)的时间复杂度会慢一些 所以这究竟是顺序表的编写还是链表的改进? IntList public class IntList {public int first;public IntList rest;public IntLis…

后端增删改查的基本应用——一个简单的货物管理系统

最终效果,如图所示: 如果想要进行修改操作,可点击某栏修改选项,会在本表格下方弹出修改的具体操作界面(点击前隐藏),并且目前的信息可复现在修改框内。 本篇文章通过该项目将后端和前端结合起来…

编译链接的过程发生了什么?

一:程序的翻译环境和执行环境 在 ANSI C 的任何一种实现中,存在两个不同的环境。 第 1 种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第 2 种是执行环境,它用于实际执行代码 也就是说:↓ 1&#xff1…

微信小程序启动不起来,报错凡是以~/包名/*.js路径的文件,都找不到,试过网上一切方法,最终居然这么解决的,【避坑】命运的齿轮开始转动

app.json "resolveAlias": {"~/*": "/*"},文件代码也没有问题,网上的方法试过来了,大模型AI也问过遍,熬夜到凌晨2点半,最不可思议的是居然是因为微信开发者工具版本的问题,我真的是笑死…

网站排名,让网站快速有排名的几个方法

要让网站快速获得并提升排名,需要综合运用一系列专业策略和技术,这些策略涵盖了内容优化、技术调整、外链建设、用户体验提升等多个方面。以下是让网站快速有排名的几个方法: 1.内容为王:创造高质量、有价值的内容 -深入…

南京大学《软件分析》李越, 谭添——1. 导论

导论 主要概念: soundcompletePL领域概述 动手学习 本节无 文章目录 导论1. PL(Programming Language) 程序设计语言1.1 程序设计语言的三大研究方向1.2 与静态分析相关方向的介绍与对比静态程序分析动态软件测试形式化(formal)语义验证(verification) 2. 静态分析:2.1莱斯…

Redis数据库与GO(一):安装,string,hash

安装包地址:https://github.com/tporadowski/redis/releases 建议下载zip版本,解压即可使用。解压后,依次打开目录下的redis-server.exe和redis-cli.exe,redis-cli.exe用于输入指令。 一、基本结构 如图,redis对外有个…

k8s的安装和部署

配置三台主机,分别禁用各个主机上的swap,并配置解析 systemctl mask swap.target swapoff -a vim /etc/fstab配置这三个主机上的主机以及harbor仓库的主机 所有主机设置docker的资源管理模式为system [rootk8s-master ~]# vim /etc/docker/daemon.json…

为什么推荐你一定要弄懂千门八将108局,学会做局思维的人有多么的厉害?

在纷繁复杂的社会与商业环境中,能够洞悉事物本质、预见趋势并巧妙布局的人,往往能在竞争中脱颖而出,成为时代的弄潮儿。而“千门八将108局”这一古老而深邃的智慧体系,不仅蕴含了中国传统文化中对于策略、心理学、人际交往的深刻理…

PCL 提取点云边界

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算法向量 2.1.2 提取边界点 2.1.3 可视化边界点 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总&#xff0…

动手学深度学习(李沐)PyTorch 第 6 章 卷积神经网络

李宏毅-卷积神经网络CNN 如果使用全连接层:第一层的weight就有3*10^7个 观察 1:检测模式不需要整张图像 很多重要的pattern只要看小范围即可 简化1:感受野 根据观察1 可以做第1个简化,卷积神经网络会设定一个区域&#xff0c…

SolarWinds中如何添加华为交换机实现网络管理

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 SolarWinds作为一款广受好评的网络管理软件,它提供了全面的网络配置、监控和管理解决方案&#x…

组织病理学图像中的再识别|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Re-identification from histopathology images 组织病理学图像中的再识别 01 文献速递介绍 在光学显微镜下评估苏木精-伊红(H&E)染色切片是肿瘤病理诊断中的标准程序。随着全片扫描仪的出现,玻片切片可以被数字化为所谓…

【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

文章目录 请求1. 传递单个参数注意事项1 . 正常传递参数2 . 不传递 age 参数3 . 传递参数类型不匹配 2. 传递多个参数3. 传递对象 请求 访问不同的路径,就是发送不同的请求。在发送请求时,可能会带一些参数,所以学习 Spring 的请求&#xff…

【093】基于SpringBoot+Vue实现的精品水果线上销售系统

系统介绍 视频演示 基于SpringBootVue实现的精品水果线上销售系统(有文档) 基于SpringBootVue实现的精品水果线上销售系统采用前后端分离的架构方式,系统设计了管理员、商家、用户三种角色,实现了公告类型管理、商家信誉类型管理…

自由学习记录

约束的泛型通配符? Java中的泛型 xiaomi和byd都继承了car&#xff0c;但是只是这两个类是car的子类而已&#xff0c;而arraylist<xiaomi> ,arraylist<byd> 两个没有半毛钱继承关系 所以传入的参数整体&#xff0c;是car的list变形&#xff0c;里面的确都能存car…