FizzBuzz
FizzBuzzの解法で、i % (3 * 5)をしているコードを結構見る。
3と5が互いに素だからたまたま単純な掛け算で出来るだけなので、きちんと3と5の最小公倍数が15であることが分かるように書くべきだと思う。
/* vim:sw=4 et */ #include <stdio.h> inline int is_divisible(int, int); inline void swap(int *, int *); int gcd(int, int); int lcm(int, int); int main(int argc, char *argv[]) { int i; const int n = lcm(3, 5); for (i = 1; i <= 100; i++) { if (is_divisible(i, n)) { printf("FizzBuzz\n"); } else { if (is_divisible(i, 3)) printf("Fizz\n"); else if (is_divisible(i, 5)) printf("Buzz\n"); else printf("%d\n", i); } } return 0; } inline void swap(int *a, int *b) { *a ^= *b; *b ^= *a; *a ^= *b; } int gcd(int a, int b) { while (b != 0) { a %= b; swap(&a, &b); } return a; } int lcm(int a, int b) { return a * b / gcd(a, b); } inline int is_divisible(int a, int b) { return a % b == 0; }
僕はこのコード、2分じゃ書けそうにない。