javascriptのif文とfor文を使って最大公約数を出してみたい
今まで自分が勉強してきたことを使って、最大公約数を出してみたいと思い考えました。とても長くなったので、短い書き方も勉強したいです。
URL先で、最大公約数求められます。
https://app.u-chop.com/gcd/
javascript
function gcd() {
var aa = document.getElementById("a").value;
var bb = document.getElementById("b").value;
var divisorA = [];
var divisorB = [];
var commonDivisor = [];
for(var i = 0; i <= aa; i++) {
if(aa % i === 0) {
divisorA.push(i);
}
}
for(var h = 0; h <= bb; h++) {
if(bb % h === 0) {
divisorB.push(h);
}
}
for(var d = 0; d < divisorA.length; d++) {
for(var e = 0; e < divisorB.length; e++) {
if(divisorA[d] === divisorB[e]) {
commonDivisor.push(divisorA[d]);
}
}
}
var gcd = commonDivisor[commonDivisor.length - 1];
document.getElementById("p").innerHTML = gcd;
}
html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>最大公約数</title>
</head>
<body>
<form>
<input type="text" id="a">
<input type="text" id="b">
</form>
<button onclick="gcd()">最大公約数を求める</button>
<p id="p"></p>
<script src="script.js"></script>
</body>
</html>
javascript
var aa = document.getElementById("a").value;
var bb = document.getElementById("b").value;
var divisorA = [];
var divisorB = [];
var commonDivisor = [];
ボックスに入力された数字をそれぞれ変数aa と変数bb に代入する(1,2行目)
入力された数字の約数を入れる配列をつくる(3,4行目)
入力された数字の公約数を入れる配列をつくる(5行目)
for(var i = 0; i <= aa; i++) {
if(aa % i === 0) {
divisorA.push(i);
}
}
変数 i が変数aa 以下の時は繰り返す。一周するごとに変数 i に1を足す。
もし、aa / i のあまりが 0 であるなら、配列divisorA に i を代入する。
(例)
① divisorA.push(1) → divisorA = [1];
② divisorA.push(2) → divisorA = [1,2];
for(var d = 0; d < divisorA.length; d++) {
for(var e = 0; e < divisorB.length; e++) {
if(divisorA[d] === divisorB[e]) {
commonDivisor.push(divisorA[d]);
}
}
}
2つの数の約数を比べた時に、同じであれば配列commonDiisor に代入する
(例)10 と 5 の場合
divisorA = [1,2,5,10];
divisorB = [1,5];
commonDivisor = [1,5];
var gcd = commonDivisor[commonDivisor.length - 1];
配列commonDivisor の一番最後に入れた数を代入する