[英]A Rule of Divisibility by 7 - Codewars Javascript Challenge
对于这个Codewar挑战
以下代码通过了测试,但是遇到超时错误:
function seven(m) { let count = 0; m = String(m); while (Number(m.slice(0, m.length - 1)) - (Number(m[m.length - 1]) * 2) % 7 !== 0) { let first = Number(m.slice(0, m.length - 1)); let second = Number(m[m.length - 1]) * 2; m = first - second; count++; m = String(m); } return [Number(m), count]; } console.log(seven(483));
据我了解,这个想法是继续分解一个数字,直到被7整除为止。当该数字最多为 2位时停止。
当且仅当x-2y可被7整除时,形式为10x + y的数字m可被7整除。换句话说,从剩余数字形成的数字中减去最后一位的两倍。 继续执行此操作,直到获得一个已知的可被7整除或不可除的数; 您可以在此数字最多2位时停止,因为您应该知道最多2位数字是否可以被7整除。
当且仅当使用此过程获得的最后一个数字可被7整除时,原始数字才可被7整除。
范例 :
1 - m = 371 -> 37 − (2×1) -> 37 − 2 = 35 ;
因此,由于35可被7整除,因此371可被7整除。
而且我不确定如何进一步优化此代码。 也许我对这个问题有误解,这就是为什么while循环过于复杂。 有什么建议么?
编辑 -第二次尝试-尝试避免转换为String并返回Number:
function seven (m) { let count = 0; while ((String(m).length > 2) && (m % 7 !== 0)) { let last = (m % 10); let first = (m - last) / 10; m = (first - (last * 2)); count++; } return [m, count]; }
这通过了84次测试,未通过26次。
您可以只计算input
直到input
小于3位,然后返回计数。
请尝试以下方法:
function seven(m) {
let count = 0;
while(m > 99) {
m = parseInt(m / 10) - (2 * (m % 10));
count++;
}
return [m, count];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.