繁体   English   中英

7的可除性规则-Codewars Javascript挑战

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM