JavaScriptでズッカーマン数を探す旅

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
JavaScriptは0除算でエラーが出ないの初めて知った

この記事を三行にまとめると

入力された数字がズッカーマン数か判定する
入力した数以下のズッカーマン数を抽出
ゼロ除算を回避する
この記事は以下の動画の中に出てきたサンプルコードを載せたものです。コピペなどが必要なときに使ってください。





HTMLとCSS

<div>
  <input type="number" id="number">
  <button type="button" id="start">検証開始</button>
</div>
<div id="formula"></div>
<div id="result"></div>

<style>
  * { font-size: 24px; font-family: 'メイリオ' }
  body { text-align: center }
  input, button { padding: 5px }
  #result { width: 800px; margin: 0 auto }
</style>



入力された数字がズッカーマン数か判定する

number = document.getElementById('number');
start = document.getElementById('start');
formula = document.getElementById('formula');
result = document.getElementById('result');

start.onclick = function() {
  num = number.value;
  lists = num.split('');

  sum = lists.reduce(function(prev, current){
    return Number(prev) * Number(current);
  });

  formula.innerText = lists.join('×') + '=' + sum + '\n';
  formula.innerText += num + '÷' + sum + '=' + (num / sum);
  result.innerText = (num % sum == 0)  ? 'ズッカーマン数です!' : 'ズッカーマン数じゃないです';
}



入力した数以下のズッカーマン数を抽出

start.onclick = function() {
  num = number.value;
  lists = num.split('');

  zuckerman = [];
  for(i = 1; i <= num; i++) {
    lists = String(i).split('');

    sum = lists.reduce(function(prev, current){
      return Number(prev) * Number(current);
    });

    if(i % sum == 0) {
      zuckerman.push(i);
    }
  }

  result.innerText = 'ズッカーマン数は' + zuckerman.join(', ');
}



ゼロ除算を回避する

入力した数字に0が含まれていたら処理を終了するパターン
start.onclick = function() {
  num = number.value;
  lists = num.split('');

  if(lists.includes('0')) {
    result.innerText = 'ズッカーマン数じゃないです';
    return;
  }

  sum = lists.reduce(function(prev, current){
    return Number(prev) * Number(current);
  });

  formula.innerText = lists.join('×') + '=' + sum + '\n';
  formula.innerText += num + '÷' + sum + '=' + (num / sum);
  result.innerText = (num % sum == 0)  ? 'ズッカーマン数です!' : 'ズッカーマン数じゃないです';
}

かけ算の合計が0だったら処理を終了するパターン
start.onclick = function() {
  num = number.value;
  lists = num.split('');

  sum = lists.reduce(function(prev, current){
    return Number(prev) * Number(current);
  });

  if(sum == 0) {
    result.innerText = 'ズッカーマン数じゃないです';
    return;
  }
 
  formula.innerText = lists.join('×') + '=' + sum + '\n';
  formula.innerText += num + '÷' + sum + '=' + (num / sum);
  result.innerText = (num % sum == 0)  ? 'ズッカーマン数です!' : 'ズッカーマン数じゃないです';
}
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください