题目
给定一个非负整数
num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
输入: num = 38
输出: 2
题解
第一种
我们在函数中先定义了两个变量num_circle和res,num_circle变量用来保留num的值,res用来存储num参数的数字之和,然后我们接下来使用一个循环,循环条件为无限循环,在循环内部,我们在使用一个循环,我们在内部循环中先将num_circle的值赋给res,并在num_circle重置为0,然后我们不断将num_circle的数加入到res中,并将num_circle除以10取整,以便处理下一位数,当num_circle为0时,表示已经处理完了num的所有位数,接下来我们判断res-去10之后是否小于0,如果满足我们则直接返回res,此时表示已经得到了最终结果,否则我们将res的值赋给num_circle,并将res重置为0,以便继续处理下一轮的数字之和即可
var addDigits = function(num) {
let num_circle = num;
let res = 0;
while(true){
while(num_circle != 0){
res += num_circle % 10;
num_circle = Math.floor(num_circle / 10);
}
if(res - 10 < 0){
return res;
}else{
num_circle = res;
res = 0;
}
}
};
第二种
我们在函数中先定义了一个内部函数a,该函数的作用主要用于计算数字根,在该函数内部,首先判断输入的数字是否只有一位,如果是我们则直接返回该数字,否则我们就通过toString()方法将输入的数字转换为字符串,并使用split方法将其拆分为单个数字字符,然后我们声明一个sum变量,默认值为0,接下来我们使用循环进行遍历所有的数字字符,并通过parseInt方法将它们转换为整数后进行相加后存储到sum变量中,这样我们就可以得到所有数字之和,接下来我们将得到的数字之和作为参数递归调用函数a,继续计算数字根,直到最终得到的数字只有一位为止,最后我们在主函数中调用a函数,然后我们返回计算得到的数字根即可
var addDigits = function(num) {
function a(value) {
if(String(value).length === 1) {
return value
}
value = value.toString().split('')
let sum = 0
for(let i=0;i<value.length;i++) {
sum += parseInt(value[i])
}
return a(sum)
}
return a(num)
};
坚持努力,无惧未来!