この記事を三行にまとめると
入力した数字がカプレカ数か判定するカプレカ数になるまで操作を繰り返す
16進数のカプレカ数を判定
この記事は以下の動画の中に出てきたサンプルコードを載せたものです。コピペなどが必要なときに使ってください。
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 }
</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('');
min = lists.sort().join('');
max = lists.reverse().join('');
answer = max - min;
formula.innerText = max + ' - ' + min + ' = ' + answer;
result.innerText = (num == answer) ? 'カプレカ数です!' : 'カプレカ数じゃないです';
}
入力した数以下のカプレカ数を抽出
start.onclick = function() {
num = number.value;
kaprekar = [];
for(i = 0; i <= num; i++) {
lists = String(i).split('');
min = lists.sort().join('');
max = lists.reverse().join('');
if(i == max - min) {
kaprekar.push(i);
}
}
result.innerText = 'カプレカ数は' + kaprekar.join(', ');
}
カプレカ数になるか計算結果がループするまで操作を繰り返す
start.onclick = function() {
num = number.value;
result.innerText = '';
answers = [];
while(true) {
lists = String(num).split('');
min = lists.sort().join('');
max = lists.reverse().join('');
answer = max - min;
if(num == answer) {
result.innerText += 'カプレカ数になりました!';
break;
} else {
result.innerText += max + ' - ' + min + ' = ' + answer + '\n';
if(answers.includes(answer)) {
result.innerText += 'ループに入りました';
break;
}
answers.push(answer);
num = answer;
}
}
}
16進数のカプレカ数を判定
start.onclick = function() {
num = number.value;
lists = num.split('');
min = '0x' + lists.sort().join('');
max = '0x' + lists.reverse().join('');
answer = (max - min).toString(16);
formula.innerText = max.substring(2) + ' - ' + min.substring(2) + ' = ' + answer;
result.innerText = (num == answer) ? 'カプレカ数です!' : 'カプレカ数じゃないです';
}