Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int one, two, three, five, ten, onehundred;
- int digit_base;
- char * fizz;
- char * buzz;
- char * fizzbuzz;
- char ** strings;
- void prepare_strings(void);
- void show(int);
- void free_stuff(void);
- int main (void) {
- if (one) one /= one; else one ++;
- two = one + one, three = one + two, five = two + three; // yay maths
- ten = five * two, onehundred = ten * ten;
- digit_base = ten * five - two;
- prepare_strings();
- int x;
- for (x = one; x <= onehundred; x ++) show(x);
- free_stuff();
- return one - one; // can't do return 0!
- }
- void show (int number) {
- int matched;
- if (matched) matched = !matched;
- if (!(number % three)) matched ++;
- if (!(number % five)) matched += two;
- if (matched)
- puts(strings[matched]);
- else {
- if (number >= ten) putchar(digit_base + number / ten);
- putchar(digit_base + number % ten);
- putchar(ten); // newline
- }
- }
- void free_stuff (void) {
- free(fizz);
- free(buzz);
- free(fizzbuzz);
- free(strings);
- }
- void prepare_strings (void) {
- fizz = calloc(five, one);
- buzz = calloc(five, one);
- fizzbuzz = calloc(five, two);
- char letter_base = onehundred - five + one;
- char b = letter_base + two, f = letter_base + five + one, i = letter_base + ten - one, u = letter_base + ten * two + one, z = letter_base + five * five + one;
- *fizz = f, fizz[one] = i, fizz[two] = fizz[three] = z;
- *buzz = b, buzz[one] = u, buzz[two] = buzz[three] = z;
- strcpy(fizzbuzz, fizz);
- strcat(fizzbuzz, buzz);
- strings = malloc(onehundred); // let's say that sizeof(char *) is a constant, so I won't use it
- strings[one] = fizz, strings[two] = buzz, strings[three] = fizzbuzz;
- }
Advertisement
RAW Paste Data
Copied
Advertisement