Implement Fizz Buzz Solution in C++

  1. Use Iterative Method with Literal Values to Implement Fizz Buzz Solution in C++
  2. Use Custom Class to Implement Fizz Buzz Solution in C++

This article will introduce how to implement the Fizz Buzz solution in C++.

Use Iterative Method with Literal Values to Implement Fizz Buzz Solution in C++

Fizz Buzz is a trivial problem used as the programming exercise on training sites or even interviews sometimes. It essentially boils down to printing the numbers from 1 to 100 to the console, except that the multiples of 3 and 5 should be substituted with Fizz and Buzz strings, respectively. Additionally, there is a rule for multiples of 15, which should be printed as FizzBuzz. The task can be solved with a straightforward loop statement that iterates through the 100-integer range and has if conditions for 4 different cases in it. Note that, to check if the number is multiple of the given integer, one should use a modulus operator - %.

#include <iostream>

using std::cout; using std::endl;

constexpr int COUNT = 100;

int main(){

    for (int i = 1; i <= COUNT; ++i) {

        if (i % 3 == 0)
            cout << "Fizz, ";
        else if (i % 5 == 0)
            cout << "Buzz, ";
        else if (i % 15 == 0)
            cout << "FizzBuzz, ";
        else
            cout << i << ", ";

    }

    return EXIT_SUCCESS;
}

Output:

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43, 44, Fizz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, Fizz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, Fizz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, Fizz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz,

Use Custom Class to Implement Fizz Buzz Solution in C++

Alternatively, we can implement a class that stores the given map of integers and corresponding strings and then call the built-in function to print the values to the console. Note that this method is more generic and can be used to expand the problem definition. FizzBuzz class has one data member of type map<int, string> and a constructor that takes a reference to a map. checkFizzBuzz takes no parameters and executes two nested loops to check for each number in the range of 1-100.

#include <iostream>
#include <string>
#include <map>

using std::cout; using std::endl;
using std::string; using std::cin;
using std::map;

constexpr int COUNT = 100;

class FizzBuzz {
    map<int, string> table;
public:
    explicit FizzBuzz(map<int, string> &init):
            table(std::move(init)) {}

    void checkFizzBuzz() {
        for (int i = 1; i <= COUNT; ++i) {
            for (const auto &item : table) {
                i % item.first == 0 ?
                cout << item.second << ", " :
                cout << i << ", ";
                break;
            }
        }
    }
};

int main(){
    map<int, string> init = {{3, "Fizz"},
                            {5, "Buzz"},
                            {15, "FizzBuzz"}};

    FizzBuzz fii(init);
    fii.checkFizzBuzz();

    return EXIT_SUCCESS;
}

Another way to redesign the FizzBuzz class from the previous example code is to define a constructor that takes an initializer list of integer/string pairs like map itself. The remaining part of the class stays unchanged. One could also add COUNT data member to the FizzBuzz class itself and initialize it using the constructor to allow the user to pass the different numbers as needed.

#include <iostream>
#include <string>
#include <map>
#include <initializer_list>

using std::cout; using std::endl;
using std::string; using std::cin;
using std::map;

constexpr int COUNT = 100;

class FizzBuzz {
    map<int, string> table;
public:
    FizzBuzz(std::initializer_list<std::pair<int, string>> init) {
        for (const auto &item : init) {
            table.insert(item);
        }
    }

    void checkFizzBuzz() {
        for (int i = 1; i <= COUNT; ++i) {
            for (const auto &item : table) {
                i % item.first == 0 ?
                cout << item.second << ", " :
                cout << i << ", ";
                break;
            }
        }
    }
};

int main(){
    FizzBuzz fii = {{3, "Fizz"},
                    {5, "Buzz"},
                    {15, "FizzBuzz"}};

    fii.checkFizzBuzz();

    return EXIT_SUCCESS;
}
Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.