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