题目:
Write a function, persistence, that takes in a positive parameter num and returns its multiplicative persistence, which is the number of times you must multiply the digits in num until you reach a single digit.
For example:
persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4
// and 4 has only one digit
persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126,
// 1*2*6 = 12, and finally 1*2 = 2
persistence(4) === 0 // because 4 is already a one-digit number
答案:
// 1
function persistence(num) {
var times = 0;
num = num.toString();
while (num.length > 1) {
times++;
num = num.split(‘‘).map(Number).reduce((a, b) => a * b).toString();
}
return times;
}
// 2
const persistence = num => {
return `${num}`.length > 1 ? 1 + persistence(`${num}`.split(‘‘).reduce((a, b) => a * +b)) : 0;
// +b 隐式类型转换 字符串转数字 +前为空自动默认为求和运算而不是字符串拼接
// * - / % 都可以隐式类型转换 字符串转数字
// 此处并不需要+ a和b都是字符串 a*b 隐式转换为数字
}
// 3
function persistence(num) {
var i = 0;
for (i; num.toString().length > 1; i++) {
num = num.toString().split(‘‘).reduce()(function(x,y){return x * y});
}
return i;
}
// 4
const prod = (n) => (n + ‘‘).split(‘‘).reduce((p,v) => p * v, 1)
function persistence(num) {
let p = 0;
while (num > 9) {
num = prod (num);
p++;
}
return p;
}