10/04/24 13:35:29
あまり変わらんけど関数テーブル版
#include <stdio.h>
#include <stdint.h>
void fb(uint32_t x){ printf( "FizzBuzz " ); }
void f(uint32_t x){ printf( "Fizz " ); }
void b(uint32_t x){ printf( "Buzz " ); }
void n(uint32_t x){ printf( "%lu ", (unsigned long)x ); }
void (*fn[4])(uint32_t) = { n, b, f, fb };
const uint32_t FN = 0xc1241843;
unsigned int compact( uint32_t n ) {
n = ( n & 0x0f0f0f0f ) + ((n>>4)&0x0f0f0f0f);
n = ( n & 0x00ff00ff ) + ((n>>8)&0x00ff00ff);
n = ( n & 0x000000ff ) + ((n>>16)&0x000000ff);
n = ( n & 0x0000000f ) + ((n>>4)&0x0000000f);
n = ( n & 0x0000000f ) + ((n>>4)&0x0000000f);
return n;
}
#define N 100
int main( ) {
for( uint32_t i = 1; i <= N; ++i ) {
(*fn[(FN>>compact(i)*2)&3])(i);
}
}