fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. struct ics {int i; char cs[32];};
  4. struct ics init(int i) {
  5. struct ics ics = {i};
  6. return ics;
  7. }
  8. void p(struct ics ics) {
  9. if (*ics.cs) puts(ics.cs); else printf("%d\n", ics.i);
  10. }
  11. struct ics concat(struct ics ics, const char *s) {
  12. if (strlen(ics.cs) + strlen(s) < sizeof ics.cs) strcat(ics.cs, s);
  13. return ics;
  14. }
  15. #define nsconcat(ics, n, s) ics.i % n == 0 ? concat(ics, s) : ics
  16. struct ics fizz(struct ics ics) {return nsconcat(ics, 3, "Fizz");}
  17. struct ics buzz(struct ics ics) {return nsconcat(ics, 5, "Buzz");}
  18. struct ics gizz(struct ics ics) {return nsconcat(ics, 7, "Gizz");}
  19. int main() {
  20. p(buzz(fizz(init(1))));
  21. p(buzz(fizz(init(3))));
  22. p(buzz(fizz(init(5))));
  23. p(buzz(fizz(init(15))));
  24. p(buzz(fizz(init(997))));
  25.  
  26. p(gizz(buzz(fizz(init(7)))));
  27. p(gizz(buzz(fizz(init(21)))));
  28. p(gizz(buzz(fizz(init(35)))));
  29. p(gizz(buzz(fizz(init(105)))));
  30.  
  31. p(buzz(gizz(fizz(init(105)))));
  32. return 0;
  33. }
  34.  
Success #stdin #stdout 0s 10328KB
stdin
Standard input is empty
stdout
1
Fizz
Buzz
FizzBuzz
997
Gizz
FizzGizz
BuzzGizz
FizzBuzzGizz
FizzGizzBuzz