剰余計算(%・mod)を使わないFizzBuzzの解き方

FizzBuzzとは?

1から順に数字を数えていき、3で割れ切れれば「Fizz」、5で割り切れれば「Buzz」、3でも5でも割り切れる場合「FizzBuzz」と出力するアルゴリズムである。

「剰余計算を使わない」FizzBuzz

通常のFizzBuzzに対して、様々な制限を設けたFizzBuzzが存在する。

ここでは「剰余計算(%・mod)を使わない」FizzBuzzの解法を見てみよう。

剰余計算とは、ある数を別の数で除算し、余りを取得する演算である。

つまり、コード上で「%」または「mod」を使用してはいけない。

JavaScriptコード

for (var i = 1;i < 100;i++) {
if (String((i / 15) * 10).slice(-1) == '0') {
console.log('FizzBuzz');
} else if (String((i / 5) * 10).slice(-1) == '0') {
console.log('Buzz');
} else if (String((i / 3) * 10).slice(-1) == '0') {
console.log('Fizz');
}
}

解説

ある数を15で割ると、割り切れる時は小数第一位が0になる。

例えば、1/15は、0.06666666666、5/15は0.33333333333だが、30/15は2.0、45/15は3.0である。

なので、割った数を10倍して、最後の文字列を取得(slice(-1))し、それが”0″であれば、割り切れている。

15で割り切れていれば「FizzBuzz」、5で割り切れていれば「Buzz」、3で割り切れていれば「Fizz」を出力することで、FizzBuzzが出力できる。

このようにして、剰余演算子「%」「mod」を使用せずにFizzBuzzを書くことができる。