## What is a Spy Number?

**A number is said to be a spy number if sum of its digits is equal to the product of its digits.** Taking the number 1124 as an example:

*Sum of digits of 1124:*

*= 1 + 1 + 2 + 4*

*= 8*

*Product of digits of 1124:*

*= 1 x 1 x 2 x 4*

*= 8*

As the sum of digits and product of digits is equal for 1124, hence it is a Spy Number.

## Spy Number Program

This is the program to check if a given number is a Spy number or not.

```
import java.util.Scanner;
public class KboatSpyNumber
{
public void spyCheck() {
Scanner in = new Scanner(System.in);
System.out.print("Enter Number: ");
int num = in.nextInt();
int orgNum = num;
int digit, sum = 0, prod = 1;
while (num > 0) {
digit = num % 10;
sum += digit;
prod *= digit;
num /= 10;
}
if (sum == prod)
System.out.println(orgNum + " is Spy Number");
else
System.out.println(orgNum + " is not Spy Number");
}
}
```

Let's go over the program to understand it. In the below lines of the program:

```
Scanner in = new Scanner(System.in);
System.out.print("Enter Number: ");
int num = in.nextInt();
int orgNum = num;
```

we accept the number as input from the user through Scanner class and make a copy of it in variable `orgNum`

.

In the line after that:

`int digit, sum = 0, prod = 1;`

we declare 3 int variables — `digit`

, `sum`

and `prod`

. `digit`

will hold the extracted digit of the number. `sum`

and `prod`

are used as accumulators to store the sum and product of digits, respectively.

Next we have the while loop:

```
while (num > 0) {
digit = num % 10;
sum += digit;
prod *= digit;
num /= 10;
}
```

This while loop will run till the number is greater than 0. Inside the loop, we extract the digit, add it to sum, compute product with it and lastly, we truncate the number.

After the loop, we have the if check:

```
if (sum == prod)
System.out.println(orgNum + " is Spy Number");
else
System.out.println(orgNum + " is not Spy Number");
```

In this if statement, we check if sum of digits is equal to their product and print an appropriate message accordingly.

Let us add a few print statements to get some insights into what is happening in each iteration of the loop and then we will see the output and correlate it with the code.

Here is the program with the print statements added and its output:

```
import java.util.Scanner;
public class KboatSpyNumber
{
public void spyCheck() {
Scanner in = new Scanner(System.in);
System.out.print("Enter Number: ");
int num = in.nextInt();
int orgNum = num;
int digit, sum = 0, prod = 1;
int itr = 1;
while (num > 0) {
digit = num % 10;
sum += digit;
prod *= digit;
num /= 10;
/*
* Additional Print Statements
* for explanation
*/
System.out.println("Iteration " + itr++);
System.out.println("digit=" + digit);
System.out.println("sum=" + sum);
System.out.println("prod=" + prod);
System.out.println();
}
if (sum == prod)
System.out.println(orgNum + " is Spy Number");
else
System.out.println(orgNum + " is not Spy Number");
}
}
```

#### Output

Before the execution of while loop, value of `sum`

and `prod`

is 0 and 1, respectively. In the first iteration, the digit in the unit’s place which is 3 is extracted. `sum`

is 0, adding digit to `sum`

changes the value of `sum`

to 3 as shown in the output above. `prod`

is 1, multiplying it with digit makes `prod`

also as 3.

Program control goes back to the beginning of while loop and tests the condition. As `num`

is greater than 0, second iteration of while loop starts. Digit 2 is extracted from the number. `sum`

becomes 5, `prod`

becomes 6.

Again, program control goes back to the beginning of while loop. Condition is still true as number is greater than 0. Last digit of the number is extracted. `sum`

becomes 6, `prod`

remains 6. The number becomes 0 and third iteration of while loop completes.

Again, program control goes back to the beginning of while loop. But now the condition becomes false as `num`

is 0. Program control comes to the if check after the while loop. As `sum`

and `prod`

are both 6, this condition tests true. 123 is spy number gets printed to the console.