FizzBuzzをやってみた
気分転換にやってみたので晒します。
3で割り切れたら”Fizz”、5で割り切れたら”Buzz”、
両方で割り切れたら”FizzBuzz”、
いずれでもないときは数字を表示するアレです。
use warnings; use strict; use integer; foreach my $i (1..100) { if ( calc_remainder_u08($i, 3) == 0 && calc_remainder_u08($i, 5) == 0 ) { print 'FizzBuzz'; } elsif ( calc_remainder_u08($i, 3) == 0 ) { print 'Fizz'; } elsif ( calc_remainder_u08($i, 5) == 0 ) { print 'Buzz'; } else { print $i; } print "\n"; } sub calc_remainder_u08 { my $dividend = shift; my $divisor = shift; # $a = ( $dividend % $divisor ); my $a = $dividend; my $b = ( $divisor << 8 ); foreach (1..8) { $b >>= 1; if ( $b <= $a ) { $a -= $b; } } return $a; } __END__
“use integer”は、今回は不要ですが、
-1とかを算術シフトする際は必要ですよね。
今回の場合は、整数しか扱わないって意味を込めて宣言しました。
あと、”calc_remainder_u08″は、
符号なし8bit整数で余りを求めるという意図で命名しました。
なので、符号なし8bit整数しか正しく計算できません。
やってることはなつかしの筆算です。
2進数で筆算をすると九九が不要なので簡単ですよね。
おしまい。
Leave a Comment