【JS】判断快乐数

news2024/10/9 22:43:54

思路

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

  • 转化为字符串,使用split方法
// 将数字转换为字符串,以便拆分为单个数字
let arr = ('' + (totalCount || n)).split('');
  • 使用数学运算符
   let sum = 0; // 初始化 sum 为 0
    while (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达到1
    while(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,则说明已经出现过这个数字,陷入循环,返回false
        if (set.has(totalCount)) {
            return false;
        }

        // 将当前的totalCount添加到set中,用于下一次循环的检测
        set.add(totalCount);
    }

    // 如果循环正常结束,说明最终totalCount达到1,返回true
    return true;
};

//方法二
// 定义函数 getSum,用于计算一个数各位数字的平方和
var getSum = function (n) {
    let sum = 0; // 初始化 sum 为 0
    while (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.coloradmin.cn/o/2200244.html

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

相关文章

hgkhjhkj

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

Android Media3 1.4.0 新特性解析

Android Media3 1.4.0 新特性解析 Media3 1.4.0 的发布为 Android 开发者带来了众多重要的新特性和增强功能,进一步提升了媒体播放体验。本文将详细介绍该版本中的关键更新,涵盖 ExoPlayer 预载工具、HDR 支持的改进、字幕处理优化、PlayerView 中的图像支持,以及 MediaSes…

GAMES104:16 游戏引擎的玩法系统:基础AI-学习笔记

文章目录 一,寻路/导航系统Navigation1.1 Walkable Area1.1.1 Waypoint Network1.1.2 Grid1.1.3 Navigation Mesh1.1.4 Sparse Voxel Octree 1.2 Path Finding1.2.1 Dijkstra Algorithm迪杰斯特拉算法1.2.2 A Star(A*算法) 1.3 Path Smoothin…

Docsify搭建个人博客

前提:电脑安装了Node.js 安装到本地 CMD命令下输入node -v查看是否已经安装了Node.js 安装docsify-cli工具:npm i docsify-cli -g 使用git下载docsify-Plus项目,Gitee地址:https://gitee.com/librarycodes/docsify-plus cd…

基于SpringBoot的国家基础信息管理功能的设计与实现

目录 前言 一、标准信息参考 1、信息来源 二、后台基础信息的维护管理 1、实体类和Mapper类 2、业务层和控制层设计 3、前端界面实现 三、管理页面效果 1、列表管理界面 2、国家信息调整 四、总结 前言 在之前的博客中,我们基于GeoTools工具实现了全球各个…

Base64字符串转图片在线工具

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本原理 Base64编码,作为一种将二进制数据转换为文本格式的方法,其核心在于利用64个可打印字符来表征任意的二进制信息。这一编码方式的出现&#…

应急响应:DHCP$DNS劫持实战

目录 DHCP DHCP安全性: DHCP常见的攻击手段: DNS DNS常见的攻击方式: DNS&DHCP攻击实战演练: 环境配置: 利用: 排查: 防御: DHCP 介绍: DHCP(…

【Redis】Set类型的常用命令与应用场景

目录 1.命令小结 2.命令解析 3.编码方式与应用场景 1.命令小结 (1)set的特点 1)set中存放的数据也都是String类型 2)set集合中的元素是无须的 3)set集合中的元素是唯一的,不可重复 (2&a…

苦瓜检测系统源码分享

苦瓜检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision 研究…

以光塑形:光固化3D打印机原理图文解析

公众号端: 光固化打印机介绍https://mp.weixin.qq.com/s?__bizMzkwMjc0MTE3Mw&mid2247484073&idx1&sn0d0fd026b373b06cd7c340ec8f56a006&chksmc0a1af73f7d62665a632baebbde4e5e00ffb9c6bd31bf547b4a86855d5524535619a6175a428#rd 光固化打印机…

linux如何与网络时间对齐(雪花算法ID重复)

文章目录 前言一、可能引发什么问题?二、调整步骤1.查看当前系统时间2.修改为中国时区3.同步网络时间4. 雪花id重复 总结 前言 linux服务器是部署服务的不二之选,有个小问题不可忽略: 会发现默认的服务器时间并非中国时区,时间也是相差八小时,中国时区…

python全栈学习记录(二十四)元类、异常处理

元类、异常处理 文章目录 元类、异常处理一、元类1.元类控制类的实例化2.属性/方法的查找顺序3.单例 二、异常处理 一、元类 1.元类控制类的实例化 类的__call__方法会在产生的对象被调用时自动触发,args和kwargs就是调用实例时传入的参数,返回值是调用…

Hotspot是什么?

Hotspot 简单来说,JVM的一种。 一、HotSpot 的官方定义 HotSpot 是 Oracle 公司开发的一个高性能的 Java 虚拟机(JVM)。它通过一系列先进的技术和优化手段,为 Java 应用程序提供高效的运行环境,实现了跨平台的代码执行…

文献下载/影响因子查询/文献检索/文献翻译平台推荐

文献下载平台 科研通 文献互助平台 - 科研通(AbleSci.com) 每天签到可领10积分,右上角求助文献,一篇10积分,基本实现免费下载。 尽量输入doi(类似文献id),如果没有doi则输入标题作者摘要等信息&#xff0…

SpringBoot 整合JPA

spring data jpa JPA(java persistence api) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 [1] Sun引入新的JPA ORM规范出于两…

链表Set_LinkList(建立)

用单链保存集合元素,元素由键盘输入。输入以-1结束,将所建链表打印输出。 链表结构如下图所示: 提示: 1.链表中数据元素为整型,typedef int ElemType; 2.用结构体自定义链表结构Set_LinkList ; 3.初始化链表…

【每日刷题】Day135

【每日刷题】Day135 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 011. 连续数组 - 力扣(LeetCode) 2. 【模板】二维前缀和_牛客题霸_牛客…

基于SSM的共享读书网站

文未可获取一份本项目的java源码和数据库参考。 1.1 题目背景 进入新时代,中国的经济建设和社会发展需要与之相适应的人力资源相匹配。如何提升人力资源的素养,是新时代中国持续发展亟待解决的问题[1]。阅读不失为其中一个有效的手段。有效有益的阅读能…

【每日一题 | 24.10.6】确定字符串是否包含唯一字符

1. 题目2. 解题思路3. 代码实现(AC_Code) 个人主页:C_GUIQU 归属专栏:每日一题 1. 题目 确定字符串是否包含唯一字符 2. 解题思路 题目要求:判断输入的字符串是否唯一,这里想到可以借助布尔数组。 第一…

软件测试外包干了4年,感觉废了....

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…