首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我尝试用Javascript实现Luhns算法,但我的程序总是无限循环

Luhns算法,也称为Luhn算法或模10算法,是一种用于验证身份证号码、信用卡号码等数字的有效性的算法。该算法通过对数字进行加权求和并进行模10运算,从而判断数字是否有效。

在使用Javascript实现Luhns算法时,可能会出现无限循环的问题。这通常是因为在算法的实现过程中存在错误或逻辑问题导致的。以下是一个可能导致无限循环的常见错误示例:

代码语言:txt
复制
function luhnsAlgorithm(number) {
  let sum = 0;
  let isDouble = false;

  for (let i = number.length - 1; i >= 0; i--) {
    let digit = parseInt(number.charAt(i));

    if (isDouble) {
      digit *= 2;
      if (digit > 9) {
        digit -= 9;
      }
    }

    sum += digit;
    isDouble = !isDouble;
  }

  return sum % 10 === 0;
}

let number = "1234567890123456";
console.log(luhnsAlgorithm(number));

在上述示例中,循环的终止条件可能存在问题,导致无限循环。为了解决这个问题,我们可以修改循环的终止条件,确保在处理完所有数字后退出循环。以下是修正后的示例:

代码语言:txt
复制
function luhnsAlgorithm(number) {
  let sum = 0;
  let isDouble = false;

  for (let i = number.length - 1; i >= 0; i--) {
    let digit = parseInt(number.charAt(i));

    if (isDouble) {
      digit *= 2;
      if (digit > 9) {
        digit -= 9;
      }
    }

    sum += digit;
    isDouble = !isDouble;
  }

  return sum % 10 === 0;
}

let number = "1234567890123456";
console.log(luhnsAlgorithm(number));

修正后的代码中,我们使用了正确的循环终止条件,确保在处理完所有数字后退出循环。这样,我们就可以避免无限循环的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fundebug 微信小程 BUG 监控插件更新至 1.2.1,优化错误上报次数的限制算法

摘要: 1.2.1优化错误上报次数的限制算法,新增silentHttpHeader配置选项,请大家及时更新哈!...欢迎大家免费试用,也欢迎各位用户反馈建议或者问题。 优化错误上报次数的限制算法 在小程序生命周期之内,Fundebug 最多错误上报次数为 50 次,这是为了避免无限循环导致无限报错。...这里所说的生命周期,指的是小程序仍然存在于内存里面。 根据微信小程序的文档,wx.request的最大并发限制是  10  个。...参考 Fundebug 文档 - silentHttpHeader 微信小程序文档 - 网络 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React...欢迎大家免费试用!

55340

一道Google面试题:如何分解棘手问题(下)

虽然我们仍然可以在JavaScript中模拟尾部递归,但我们将保持这种简单性,并创建一个典型的递归函数。 在编写代码之前,我们需要弄清楚我们的算法。对于递归,使用深度优先搜索是有意义的。...当我们将当前节点连接到连续的ID上时,就会发生这种情况。每次我们进一步重复,我们都要确保在循环其相邻节点之前将当前节点添加到连续ID列表中。 始终添加当前节点可确保不会无限重复。...回到循环的顶端,我本可以使用while(true),但我想要一个防止出现问题的方法,这在调试时很有用,因为无限循环是一件很麻烦的事情。 在那之后,我们将拼接节点。...每次,我都会想出更好的想法,但一直遇到JavaScript速度限制。 我本来可以做的优化有一个完整的列表,但是以代码可读性为代价。我不想要那样(反正还是用过)。...我想强调的是,TechLead的问题可能是你在职业生涯中遇到的;也许是这样,但是在典型的JavaScript应用程序中,速度从来都不是一个因素,这非常罕见。

86430
  • Js算法与数据结构拾萃(1)

    主要阐述一些基于JavaScript的数据结构和算法基础。 ? 哪些是需要学习的?...测试用例给的都是乱序的,因此,基于乱序的测试用例,如果不排序,是无法优化算法的。尤其是数组去重,能不做就不做。 所以考虑排序。那么对剩下的数组就转化为了两数月之和等于-nums[i]的问题。...看了那么多条件语句可能会很恶心,但算法绝多数时候不是有大道至简这种说法的。事实上上述代码还有多处边界情况可调优,可以说,你帮电脑考虑得越周到,程序就越快。...然而,递归在程序的世界总是恐怖的存在。 ? 递归涉及了大量的重复计算。以求解fib(5)为例:递归树就重复了3次fib(2)的计算。 ? 解法二:递推 我想解法二才是需要考察的程序员思维。...变化图:取巧 做算法题总不乏一群取巧的人。他们给出了各种有意思的答案。 测试用例仅仅能支持到N=31时的情况。

    74930

    分享 7 个你可能喜欢的 JS 小技巧

    我知道这一点是因为我和我的杰出合著者亚当斯科特一起写了一些内容。 为了纪念这个版本,我决定收集一些我最喜欢的 JavaScript 片段。我不是在谈论大量的功能、框架或自动生成的代码。...这个领域变得非常深入和复杂,但我总是保持简单而快速的 Mulberry32 算法来给我完全确定性的伪随机数(这意味着如果你从相同的种子开始,你总是得到相同的列表值)。...我将它封装在一个生成器函数中,这是我最喜欢的 JavaScript 专用特性之一。...,它是从经典的 C 实现中借来的。...value); // 0.7620641703251749 console.log(generator.next().value); // 0.0211441791616380 这个生成器函数包装了一个无限循环

    52120

    脑洞:如何用一个整数来表示一个列表?

    这是因为列表生成式、range 和大多数你打算在 for 循环中使用的东西,都被禁止用在只有 int 类型的方言中。所有这些都被 while 循环替代了。...我可能很快会写一篇完整的关于生成质数的算法的文章,因为这是一个很酷的话题,本身也是一个古老的研究领域。...我以后可能会写其它文章,介绍更好的用于生成和分解质数的算法,以及其它复杂数据结构的 int 表示形式。 脚注 我认为在内存不足之前,程序也会出现中断,但是文档确实明确地提到它们具有无限的精度。...我认为在 2020 年用 Python 指代 Python3 是没问题的,但我也认为这个细节值得加一条脚注。 对于用哥德尔数表示列表,这很容易被反驳说是一种糟糕的表示形式。...另请参见《 The Genuine Sieve of Erathosthenes》论文,它澄清了这一算法是如何被定义的。 Python猫注: 以上是全部译文,但我最后还想补充一个有趣的内容。

    54320

    一个快速的 Vue3 无限滚动组件

    现在,让我们一起来看看这个组件的实现过程。 为什么还要使用无限滚动组件? 我们都见过使用无限滚动来显示其内容的网站的示例,但是什么时候使用它,它的效果会比使用典型的分页系统更好呢?...你可以阅读我之前分享的一篇文章《无限滚动与分页哪个用户体验更好?如何正确使用它们》,在这里,我只简单的总结一下它们的有缺点。...这个 API 调用可以是任何东西,从简单应用程序中的简单数据库查询一直到更高级应用程序中的复杂推荐算法。...v-for 循环来迭代我们的内容并为每个内容呈现一个 PostComponent。...由于 API 调用将是异步的,因此创建某种加载微调器,在加载新数据时显示 创建更复杂的 API 算法并将其连接到数据库 为每个内容添加更多数据并找到显示它的新方法 结论 我希望本教程对你熟悉 Vue3

    2.2K20

    【翻译】为什么 goroutine 的栈内存无穷大?

    一些 Go 语言的新学习者总是会对 goroutine 栈内存占用大小感到非常好奇。这一般是由于程序员进行无限的函数循环调用导致的。...许多程序员都曾经写过类似的代码而导致函数的无限循环调用,并使得他们的程序崩溃,但一般情况下并不足以对他们的机器造成毁灭性破坏。问题是,为什么 Go 的程序就特殊一点的呢?...当函数执行完毕,事情并没有就此结束,函数的返回参数又被拷贝至调用者的栈结构中,然后释放无用的栈空间。 通过这个过程,有效地实现了栈内存的无限使用。...但是我一直注意到一个问题,当你的程序存在函数的无限循环调用而即将导致你的操作系统内存枯竭,而此时又恰好需要分配新的栈页面,则会从堆中分配内存。...我相信这很快就会使程序用光你机器所有空余的物理内存,交换存储器也会被大量使用,最终导致你的系统变得非常不稳定。

    1.1K60

    一周技术学习笔记(第93期)-请用代码的优雅取悦你的领导

    1、请用代码的优雅取悦你的领导 发现身边有很多人,总是喜欢学习和研究分布式架构相关的知识点,却不喜欢读《重构》、《代码整洁之道》这一类能够提高程序员最本质的写代码手艺的书籍。...然而,每次CODE REVIEW,总会有一些让人摸不着头脑要讲半天的代码。 或许是人人都是架构师的这个环境,让架构的课程戳手可得,确让人忘了自己应该去追求的整洁代码之美。...所有的事物都是变化的; 所有变化都不是100%可靠的; 结论:所有事物都不是100%可靠的; ”从概率学角度分析,凡是有可能会出错的地方,只要变化次数足够多,最终出错的概率会无限趋向于1“ 3、一个系统为什么出现熵增...重构,其实是不改变功能的情况下,变更实现方式;而单元测试,就是固化下来的,可重复执行的测试用例。 代码本身质量不好,单元测试难写;单元测试难写,代码质量无法快速提升;恶性循环。...代码质量高的,单元测试质量也高;相辅相成。 这里记录,我每周碰到的,或想到的,引起触动,或感动的,事物的思考及笔记。不见得都对,但开始思考记录总是好的。

    25410

    JavaScript生态加速攻略:eslint

    ,for-of循环已在各处得到支持,因此我再次修改了包,并将函数实现替换为源代码中的原始版本。...另外,我还尝试用标准的for循环替换for-of循环进行了测量。...到目前为止,我们看了实现细节,但我们实际上正在处理什么样的选择器?有没有潜力缩短其中的一些?为了测试这个理论,我首先需要更好地了解正在处理的选择器的类型。毫不奇怪,大多数选择器都很短。...这个小实验证实了我的假设,即我们为选择器引擎付出了相当多的时间。 第三方插件和预设的影响 尽管从eslint的设置中可以看到更多的优化空间,但我开始想知道我是否花时间优化了正确的东西。...话虽如此,在vite的代码库(144个文件)上运行所有这些数字的结果如下。 根据这些数字,我相当有信心,仅通过这个小实验,我们就可以用 JavaScript 实现非常接近 Rust 的性能。

    67420

    软件测试测试开发|常见软件测试框架类型:TDD、BDD、DDD、ATDD、DevOps介绍

    测试驱动开发(TDD)测试驱动开发是一种开发方法,其核心理念是在编写实际代码之前先编写测试用例。这些测试用例描述了所期望的代码行为。开发者根据这些测试用例来编写代码,以确保代码通过所有测试并符合预期。...对于一个业务模型及其复杂、内部模块之间的相互依赖性非常强的项目,采用TDD反而会得不尝失,这会导致程序员在拆分接口和写测试代码的时候工作量非常大。...另外,由于模块之间的依赖性太强,我们在写测试代码的时候可能不采取一些桥接模式来实现,这样势必加大了程序员的工作量。...行为驱动开发(BDD)行为驱动开发是一种软件开发方法,旨在促进团队成员之间更好的沟通和合作。BDD关注的是软件行为及其预期结果,通过用自然语言编写的场景和规范来描述应用程序的行为。...常用的BDD框架有Cucumber(支持多种语言,如Java、JavaScript和Ruby)、Behave(Python)和SpecFlow(针对.NET平台)。

    47610

    编写快速安全Bash脚本的建议

    我们会包含: 一些bash基础知识(“你怎么写一个for循环”) 杂项事宜(“总是引用你的bash变量”) bash脚本安全提示(“总是使用set -u”) 如果你编写shell脚本,并且你没有阅读这篇文章中其他任何内容...还有 局部变量 ,它们的作用域只能存在于bash函数中。 我基本上从来没有使用过这样的函数(不像我写的其他编程语言),我从来没有使用过局部变量。 for循环 以下是我在bash中编写循环的方法。...你也可以写while循环,但我从来没有这样写过。 有个很酷的事情是你可以遍历另一个命令的输出。seq 1 10 将数字从1到10(每行一个)打印,这个for循环只是提取该输出并遍历它。...我肯定不能。 总是引用你的 bash 变量,你会更快乐的。 返回代码, &&, 和 `|| 每个 Unix 程序都有一个“返回代码”,它是一个从0到127的整数。0表示成功,其他都意味着失败。...这在 bash 中是有作用的,因为:有时我从命令行运行一个程序,并希望仅在第一个程序成功的情况下运行第二个程序。 你可以用 && 实现!

    1.8K80

    你可能不知道的10个JavaScript小技巧

    尽管我使用Javascript来做开发有很多年了,但它常有一些让我很惊讶的小特性。对于我来说,Javascript是需要持续不断的学习的。...在这篇文章中,我将列出10个Javascript使用小技巧,主要面向Javascript新手和中级开发者。希望每个读者都能至少从中学到一个有用的技巧。...您可以为指定一个字符串作为window.name属性的值,直到您关闭该标签或窗口。虽然我没有提供任何脚本,但我强烈建议您如充分利用这个方法。...举例来说,在建设一个网站或应用程序的时候,在调试和测试模式之间切换是非常有用的。 6.判断属性是否存在 这个问题包含两个方面,既有检查属性时候存在,还要获取属性的类型。...但我们总是忽略了这些小事情: // BAD: This will cause an error in code when foo is undefined if (foo) {   doSomething

    30520

    IC验证工程师是怎么样的存在?

    先看看百度百科的解释:IC验证工程师,工作主要是根据芯片规格和特点设计并实现验证环境;根据芯片或模块的规格,利用已实现的验证环境进行验证和回归。...既然要验证,那就涉及到验证平台的搭建,验证环境的建立,总结功能点,编写测试用例,编写验证文档,写脚本等等。大的公司一般都分工明确,我是小公司,什么都干。 好像还不懂?...另外,还要尝一尝口味对不对,客户想要辣的,他炒出一盘甜的,怎么能忍,怎么能下口?...要的,但不是一天天的狂敲代码。作为一个IC验证工程师,你是半个程序员。...测试用例都是用代码写的,所以敲代码避免不了。但是,我觉得IC验证工程师重要的不是敲代码,而是对芯片功能的理解,验证方案的设计,其次才是代码实现,而实现起来也很简单,再不行,翻翻工具书嘛。 2.

    96820

    如何入门编程:一份初学者的指南

    设定目标:明确你学习编程的目的,是开发网站、应用程序还是数据分析等。 选择合适的语言:根据你的目标选择合适的编程语言。 理解基础概念:掌握编程基础,如变量、循环、条件语句、函数等。...Python:因其简洁易懂的语法,适合初学者入门,广泛应用于数据科学、机器学习、Web开发等。 JavaScript:对于对Web开发感兴趣的初学者,JavaScript是前端开发的核心语言。...测试:编写测试用例,确保代码的正确性和稳定性 四、如何学习编程? 在线课程:参加Coursera、edX、Udemy等平台的在线编程课程。 阅读书籍:选择适合初学者的编程书籍。...学习算法和数据结构:深入理解算法和数据结构,提高编程效率。 阅读优秀代码:学习其他优秀开发者的代码,吸收其优点。 六、编程资料分享 官方文档:学习任何语言或框架,官方文档都是最好的起点。...如果你有任何问题或需要进一步的建议,欢迎在评论区留言交流。让我们一起探索IT世界的无限可能!

    28310

    针对高级前端的8个级JavaScript面试问题

    因为数组长度不断增加,循环条件(i 循环无限进行下去,导致程序陷入僵局。...为了解决由于数组长度增长而导致的无限循环问题,可以在进入循环之前将数组的初始长度存储在一个变量中。然后,可以使用这个初始长度作为循环迭代的限制。...[1, 2, 3]; const newArr = duplicate(arr); console.log(newArr); 输出将显示数组末尾的重复元素,并且循环不会导致无限循环: [1, 2, 3...为了实现这一点,JavaScript 依赖两个特殊的方法:valueOf 和 toString。 valueOf 方法是JavaScript对象转换机制的一个基础部分。...在JavaScript中,对象键总是字符串(或 symbols),或者通过隐式强制转换自动转换为字符串。

    21830

    Node.js多线程完全指南

    事件循环是一种机制,它采用回调(函数)并注册它们,准备在将来的某个时刻执行。它与相关的 JavaScript 代码在同一个线程中运行。当 JavaScript 操作阻塞线程时,事件循环也会被阻止。...工作池用 libuv 实现,当 Node 需要在 JavaScript 和 C++ 之间进行内部通信时,会导致轻微的延迟,但这几乎不可察觉。...引用自 Mozilla: 它通过递归输入对象来进行克隆,同时保持之前访问过的引用的映射,以避免无限遍历循环。 该算法不复制函数、错误、属性描述符或原型链。...还需要注意的是,以这种方式复制对象与使用 JSON 不同,因为它可以包含循环引用和类型化数组,而 JSON 不能。 由于能够复制类型化数组,该算法可以在线程之间共享内存。...实现 setTimeout setTimeout 是一个无限循环,顾名思义,用来检测程序运行时间是否超时。它在循环中检查起始时间与给定毫秒数之和是否小于实际日期。

    4.2K21

    针对高级前端的8个级JavaScript面试问题

    因为数组长度不断增加,循环条件(i 循环无限进行下去,导致程序陷入僵局。...为了解决由于数组长度增长而导致的无限循环问题,可以在进入循环之前将数组的初始长度存储在一个变量中。然后,可以使用这个初始长度作为循环迭代的限制。...[1, 2, 3]; const newArr = duplicate(arr); console.log(newArr); 输出将显示数组末尾的重复元素,并且循环不会导致无限循环: [1, 2, 3...为了实现这一点,JavaScript 依赖两个特殊的方法:valueOf 和 toString。 valueOf 方法是JavaScript对象转换机制的一个基础部分。...在JavaScript中,对象键总是字符串(或 symbols),或者通过隐式强制转换自动转换为字符串。

    18710

    之所以被裁也许是少了这些东西

    人们总是认为我懂的很多。 这种想法并不那么差劲,所以我对此并不排斥。 (不过有少数人尽管知识渊博,但他们往往遭受相反的偏见,这很糟糕。)...在这篇文章中,我将提供一个不完整的编程主题列表,关于这些东西,人们总是错误地认为我很懂。 我并不是说你不需要学习它们,或者我不知道其他有用的东西。...(因为我使用C#,所以可能会接受它。) 算法。没有什么比美好的一天被冒泡排序或者快速排序毁掉更糟糕的事了。 如果它们与特定的实际问题联系在一起,我可以完成简单的图形遍历任务。...虽然知道O(n)符号是怎么回事,但我的理解也仅限于“不要在循环中放置循环”。 函数式语言。我不了解任何一种函数式语言,除非你把JavaScript算进去。...我曾经用过一两次古老的Node streams,但总是把错误处理搞得一团糟。 Electron。没用过。 TypeScript。我理解类型的概念,可以阅读注释,但我没有用它写过什么东西。

    49620

    用 Cursor 开发 10+ 项目后,我整理了10 条经验60条提示词案例

    优化代码性能,让程序跑得更快! 优化以下代码,减少数组操作中的循环次数。 帮我优化查询数据库的 SQL 语句,提高查询效率。 使用缓存优化下列函数的性能,避免重复计算。...将以下递归算法改成迭代算法,减少堆栈溢出问题。 优化循环中的字符串拼接操作,避免性能瓶颈。 改写这个 for 循环,使用更高效的数组方法。 帮我分析这个函数的时间复杂度,并提供优化建议。...帮我写一个测试用例,检查表单提交时是否正确验证输入。 为以下排序函数编写一组边界测试用例。 写一个异步函数的测试用例,确保它正确处理 Promise。 7. 模块化开发,让项目更清晰!...对旧代码进行重构,使用最新的技术栈和最佳实践。 将这个单体应用重构为微服务架构,并提供实现步骤。 帮我改写这个函数,使用更现代的 JavaScript 特性。...提供一种更高效的算法,用来处理大量数据的排序问题。 优化这个多线程程序,避免线程竞争和死锁。 分析我的前端页面性能,优化渲染速度。 对这个 API 进行性能分析,并提供改进建议。

    80320

    背包九讲——完全背包

    ---- 所属专栏:戳我访问 再来看看《背包问题九讲》是怎么解决这个问题的: 基本思路 这个问题非常类似于01背包问题,所不同的是每种物品有无限件。...然而这个并不能改善最坏情况的复杂度,因为有可能特别设计的数据可以一件物品也去不掉。 ---- 因为这个优化十分简单,代码实现不难,且优化的时间只是常数级别的,故不给出我的理解和代码。...---- 好了,终于到了今天我最想讲的O(VN)的优化了,我们先来看一看《背包问题九讲》里是怎么写的: O(VN)的算法 这个算法使用一维数组,先看伪代码: for i=1..N for...这就是这个简单的程序为何成立的道理。 值得一提的是,上面的伪代码中两层for循环的次序可以颠倒。这个结论有可能会带来算法时间常数上的优化。 这个算法也可以以另外的思路得出。...我的理解是:先来看看上次写的01背包:戳我访问,可以发现,在01背包使用一维数组时,v的循环是从后往前的,原因是不然程序重复使用一个物品,那么这里可以重复使用同一个物品,直接换成从前往后不就行了吗!

    29500
    领券