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,
もうちょっと効率のいい方法はありそう。