Spy number

A number is known as a spy number if the sum of its digits is exactly equal to the product of its digits.

Code Example

#include <iostream>
using namespace std;

bool checkSpy(int number) {
    int sum = 0, mul = 1, rem;

    while (number > 0) {
        rem = number % 10;
        sum += rem;
        mul *= rem;
        number = number / 10;
    }
    if (sum == mul) {
        return true;
    }
    else {
        return false;
    }
}

int main() {
    int number;

    cout << "Enter a number to check for spy number: ";
    cin >> number;

    if (checkSpy(number)) {
        cout << number << " is a spy number";
    } else {
        cout << number << " is not a spy number";
    }

    return 0;
}

Output

Enter a number to check for spy number: 123
123 is a spy number

Code Explanation

bool checkSpy(int number) {
    int sum = 0, mul = 1, rem;

This is the definition of the function checkSpy. It takes an integer argument number, which is the number being tested to see if it’s a spy number. Inside the function, several variables are declared:

  • sum: the sum of the digits of number, initialized to 0
  • mul: the product of the digits of number, initialized to 1
  • rem: the remainder when dividing number by 10, used to extract the individual digits of number
    while (number > 0) {
        rem = number % 10;
        sum += rem;
        mul *= rem;
        number = number / 10;
    }

This while loop continues until all the digits of number have been processed. Inside the loop, the remainder when number is divided by 10 is extracted and stored in rem. This gives the rightmost digit of number. The value of sum is then incremented by rem, and the value of mul is multiplied by rem. Finally, number is divided by 10, discarding the rightmost digit and moving on to the next digit.

    if (sum == mul) {
        return true;
    }
    else {
        return false;
    }
}

At the end of the loop, if the sum of the digits is equal to their product, then the function returns true, indicating that number is a spy number. Otherwise, it returns false, indicating that number is not a spy number.

int main() {
    int number;

    cout << "Enter a number to check for spy number: ";
    cin >> number;

    if (checkSpy(number)) {
        cout << number << " is a spy number";
    } else {
        cout << number << " is not a spy number";
    }

    return 0;
}

The main function is the entry point of the program. It first prompts the user to enter a number to be tested, then calls the checkSpy function with the user’s input as an argument. The result of the function is used to determine whether the number is a spy number or not, and the result is output to the screen. The return 0; statement indicates that the program has executed successfully.

Spy Number List (1-n)

This C++ program finds “spy numbers” within a given upper bound. A spy number is a number whose sum of digits is equal to the product of its digits. The code has two functions: checkSpy and main.

Code Example

#include <iostream>
using namespace std;

bool checkSpy(int number) {
    int sum = 0, mul = 1, rem;

    while (number > 0) {
        rem = number % 10;
        sum += rem;
        mul *= rem;
        number = number / 10;
    }
    if (sum == mul) {
        return true;
    }
    else {
        return false;
    }
}

int main() {
    int max;

    cout << "Enter the upper bound to find spy numbers: ";
    cin >> max;
    
    cout << "Spy numbers:" << endl;
    for (int i = 1; i <= max; i++) {
        if (checkSpy(i)) {
            cout << i << " ";
        }
    }

    return 0;
}

Output

Enter the upper bound to find spy numbers: 1500
Spy numbers:
1 2 3 4 5 6 7 8 9 22 123 132 213 231 312 321 1124 1142 1214 1241 1412 1421

Code Explanation

The checkSpy function takes an integer number as input and returns a bool indicating whether or not the number is a spy number. The function starts by initializing two variables, sum and mul, to 0 and 1, respectively. These variables will be used to keep track of the sum and product of the digits of the number.

Next, the function uses a while loop to iterate over each digit of the number. It uses the modulo operator (%) to extract the last digit, adds it to sum, multiplies it by mul, and then divides the number by 10 to shift the decimal place to the right. This process is repeated until the number is no longer greater than 0.

After the loop, the function checks if sum is equal to mul. If so, it returns true indicating that the number is a spy number. If not, it returns false.

The main function is the entry point of the program. It starts by prompting the user to enter an upper bound and storing it in a variable max. It then uses a for loop to iterate from 1 to max and calls the checkSpy function for each number. If the function returns true, the number is printed as a spy number.

Finally, the function returns 0 to indicate a successful execution.