簡體   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