if 文を使わないで FizzBuzz

というものをみかけたので C++ でやってみました。
条件演算子を使うとかいうトンチではない。

[ソース]

#include <string>
#include <iostream>
#include <boost/lexical_cast.hpp>

int
main(){
    std::string fizz[2] = { "", "Fizz" };
    std::string buzz[2] = { "", "Buzz" };
    for(int i = 1 ; i < 30 ; ++i){
        std::string num[2] = { "", boost::lexical_cast<std::string>(i) };
        std::cout << 
            fizz[ i % 3 == 0 ] + buzz[ i % 5 == 0 ] + num[ i % 3 != 0 && i % 5 != 0 ]
        << ", ";
    }
    return 0;
}

[出力]

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, 

もうちょっと効率のいい方法はありそう。