You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求JavaScript中最紧凑的多位数逐位求和至一位数的实现方案(非重复问题)

最紧凑的JavaScript数字逐位求和至一位数实现

嘿,这个需求其实不用写循环反复累加,利用**数根(Digital Root)**的数学性质,一行代码就能搞定最紧凑的实现!

核心公式原理

一个数的数根(也就是逐位求和到一位数的结果)有个现成的数学规律:

  • 如果数字是0,数根就是0
  • 否则,数根等于 n % 9,但如果余数是0(说明这个数是9的倍数),此时数根为9

一行紧凑实现

const digitalRoot = n => n ? (n % 9 || 9) : 0;

代码拆解解释

  • 当n不为0时:n % 9得到余数,若余数为0(比如n=9、18、5679这类9的倍数),0 || 9会返回9;若余数不为0,直接返回余数(也就是最终的一位数结果)
  • 当n为0时,直接返回0,完全符合数根的定义

测试验证

  • 输入5678:5678 % 9 = 8,直接返回8,和手动计算的结果一致
  • 输入9:9 % 9 = 0,所以返回0 || 9即9
  • 输入0:返回0
  • 输入123:123 %9 = 6,返回6(对应1+2+3=6)

要是你非要用字符串遍历的方式(虽然效率和简洁度都不如数学方法),也能写成一行,但显然数学公式才是最紧凑高效的选择:

const digitalRootStr = n => n ? (n.toString().split('').reduce((a,b)=>+a+ +b,0) %9 ||9) :0;

内容的提问来源于stack exchange,提问作者VinceKaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:31:11