プログラマ[LEVEL 1]ハッシュ数JavaScript


ハザード数


問題の説明


正の整数xを下のスケール数にするには、xをxの桁数の和で除算する必要があります.例えば、18の桁数の和は1+8=9であり、18は9で除算されるので、18は下付き文字数となる.自然数xを入力し、xがハザード数の関数かどうかをチェックし、解を完了します.

せいげんじょうけん


xは1または10000より大きい整数です.

に答える


この問題を初めて見ますか.今回は簡単だと思いますので、以下のようにコードします.
<script>
    function Harshad (x){
        let quot = Math.floor(x/10);
        let mod = x % 10;
        let digitSum = a + b;
        
        result = x % digitSum === 0 ? true : false;
        return result;
    }
</script>
一見うまく動いているように見えるが、見落とした事実がある.
xは1または10000より大きい整数です.
....もう一度
ノートで自分でいくつかの数字を共有して、整数xを10000点から100000点まで知って、10点の1部ごとに残りの10を加えて、1桁ごとの和を求めることができます.
対応する符号化を以下に示す.
<script>
    function Harshad (x){
        const quot01 = Math.floor(x/10000); 
        const mod01 = x % 10000;           
        const quot02 = Math.floor(mod01/1000);
        const mod02 = mod01 % 1000;
        const quot03 = Math.floor(mod02/100);
        const mod03 = mod02 % 100;
        const quot04 = Math.floor(mod03/10);
        const lastMod = mod03 % 10;
        const digitSum = quot01 + quot02 + quot03 + quot04 + lastMod;
        

        let result = x % digitSum === 0 ? true : false;
        return result;
    }
</script>
成功した!変数に満ちた乱雑なコードだが、自分で解決したほうがいい.
提出して人の答えを見た.

他人を解く

<script>
   function Harshad(n){
     return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
   }
</script>
?????これは何の一言でも可能だ,まったく天才だ
私は真剣にその行のコードを分解した.

  • まず(n+"")により整数nを文字列に変更する.ふたつに割る.
    nが136の場合、[1]、[3]、[6]

  • そして1番で出てくる各要素reduceを使用してコールバック関数を実行します.
    でも+b+aこれはいったい何ですか?Googleを試してみましたが、文字列>数字に変換すると
    この文字列の前に+を付ければいい(初めての春)

  • 以上の過程で得られた整数でnの残数を求める.
    残りの部分がある場合、ハッシュ数ではなくtrueが出力されます.
    他にない場合は、次の数字でfalseが出力され、カッコで囲まれます!へんか
  • に感銘を与える


    やはり頭が悪いと体が苦しくなります.