Javascript 使用while循环将整数拆分为数字,然后将数字相乘
尝试一个codewars(持久性错误),你必须取一个整数并将数字相乘,直到结果小于10(答案是小于10所需的次数) 例如39==3,因为:Javascript 使用while循环将整数拆分为数字,然后将数字相乘,javascript,parsing,while-loop,split,Javascript,Parsing,While Loop,Split,尝试一个codewars(持久性错误),你必须取一个整数并将数字相乘,直到结果小于10(答案是小于10所需的次数) 例如39==3,因为: 3*9=27 2*7=14 1*4=4 我的逻辑是使用while循环,因此当multipleednum>10时,将整数拆分为单个数字,将数字相乘(每次将计数增加1),然后如果结果小于10,则返回计数 我的问题是,我不确定这段代码哪里出了问题,它没有返回任何信息: function persistence(num) { let multipliedNum
function persistence(num) {
let multipliedNum = num;
let count = 0;
while (multipliedNum > 10) {
multipliedNum = (num + '').split('').reduce((previousValue, currentValue) =>
parseInt(previousValue, 10) * parseInt(currentValue, 10));
count += 1;
}
if (multipliedNum < 10) {
return count;
}
}
persistence(39);
函数持久性(num){
让multiplednum=num;
让计数=0;
而(倍数大于10){
multipleednum=(num+'').split('').reduce((previousValue,currentValue)=>
parseInt(前一个值,10)*parseInt(当前值,10));
计数+=1;
}
如果(倍数<10){
返回计数;
}
}
持久性(39);
任何关于我错在哪里的线索都很好!(这里有点像JS初学者)
您正在将结果分配给
multipleednum
,但首先使用num
,这意味着它会不断地拆分相同的num
。将num
更改为multipleednum
该代码的主要问题是,由于以下情况,它卡在无限循环中:
while(multipliedNum > 10)
因为您一直使用夹板num
并将其指定给multiliednum,因此multiliednum始终大于10
请尝试以下操作:
函数持久性(num){
让multiplednum=num;
让计数=0;
而(倍数大于10){
multipleednum=(multipleednum+'').split('').reduce((先前的值,当前值)=>
parseInt(前一个值,10)*parseInt(当前值,10));
计数+=1;
}
如果(倍数<10){
返回计数;
}
}
console.log(持久性(39))代码>您需要对while循环进行不同的检查,因为您需要在乘法中包含10
然后,您需要相同的变量来减少和分配。你可以用num
来计算。如果为了相同的目的循环使用相同的变量,则不会造成任何伤害
然后对reduce进行简化回调,parseInt
是不必要的,因为通过使用乘法操作数*
将隐式类型转换为数字。此运算符需要数字,并尝试将操作数强制转换为数字
在结束时,只需返回计数-无需检查,这永远不会是false
函数持久性(num){
var计数=0;
while(num>9){
num=num.toString().split(“”).reduce((a,b)=>a*b);
计数++;
}
返回计数;
}
console.log(持久性(39))代码>@daggett,如果您喜欢使用递归,那么下面的代码也可以解决您的问题,但我不建议您使用此代码
我刚才介绍了使用递归来解决您的问题,这是一个在大型应用程序中用于简化任务的伟大概念
输入39和336
3 * 9 = 27
2 * 7 = 14
1 * 4 = 4
============
3 times
7 * 8 * 6 = 336
3 * 3 * 6 = 54
5 * 4 = 20
2 * 0 = 0
============
4 times
代码
函数timeToGetNumbers小于10(num){
变量s=''+num
var chars=[]
如果(s.length==1)
返回1
总和=1
对于(变量i=0;i */
既然最终结果是4,为什么39==3?大卫托马斯(DavidThomas)说,即使是multipleednum
是10
,也会发生什么呢?因为它计算的是达到4的次数,而不是最终结果hh;编辑的目的是(尝试)并明确这是步骤的数量,而不是最终结果。如果我没有帮助,请随时回滚。不要修复问题中的代码。它使答案无效。@JohnKugelman代码没有修复-仍然不起作用,只是更新了一个error@daggett它返回3。
3 * 9 = 27
2 * 7 = 14
1 * 4 = 4
============
3 times
7 * 8 * 6 = 336
3 * 3 * 6 = 54
5 * 4 = 20
2 * 0 = 0
============
4 times