## Facebook Interview Question

Software Engineer Interns**Country:**United States

**Interview Type:**Phone Interview

```
func cubeAllDigits(in number:Int) -> Int {
var sum = 0
var left = number
while left > 0 {
let x = left % 10
sum += x * x * x
left = (left - x) / 10
}
return sum
}
print(cubeAllDigits(in: 2)) // 8
print(cubeAllDigits(in: 153)) // 153
print(cubeAllDigits(in: 103)) // 28
print(cubeAllDigits(in: 555555)) // 750
```

```
public static void FindNarcisisitcNumbers() {
int n = 3;
List<Integer> nums = new ArrayList<Integer>();
nums.add(0);
int power = 1;
for (int i = 1; i <= n; i++) {
for (int j = power; j < power * 10 ; j++) {
int temp = j;
int sum = 0;
while (temp != 0) {
sum += Math.pow(temp % 10, i);
temp /= 10;
}
if (sum == j)
nums.add(j);
}
power *= 10;
}
for (int nu : nums)
System.out.println(nu);
}
```

Result:

0

1

2

3

4

5

6

7

8

9

153

370

371

407

Some explanations in the comment to implementation.

I didn't find similar solutions in the example from above, so, I've decided to add my own.

```
/**
* Find all the numbers the sum of cube of each digits is the number itself.
*
* @implNote the first thing that should be done is how to identify upper boundary for list of
* numbers.
*
* If length == 1 (0 <= n < 9), then the max value of the sum of cubes will be 9*9*9 = 729
*
* If length == 2 (10 <= n < 100), then the max value of the sum of cubes will be 9*9*9*2 = 1458
*
* If length == 3 (100 <= n < 1000), then the max value of the sum of cubes will be 9*9*9*3 = 2187
*
* If length == 4 (1000 <= n < 10000), then the max value of the sum of cubes will be 9*9*9*4 =
* 2916
*
* If length == 5 (10000 <= n < 100000), then the max value of the sum of cubes will be 9*9*9*5 =
* 3645
*
* It means that for numbers with length equals to 4 there is a probability that it could be a
* number with sum of cubes equals to that number, but for numbers with length that equals to 5,
* it is not the case, expected sum will be less than a number all the time. So, we can use 10000 as
* a upper boundary for the calculation.
*/
public class SumOfCubes {
public static void main(String[] args) {
StringBuilder output = new StringBuilder();
for (int i = 0; i < 10000; i++) {
if (getSumOfCubes(i) == i) {
output.append(i).append(System.lineSeparator());
}
}
System.out.println(output);
}
private static int getSumOfCubes(final int number) {
if (number == 0) {
return 0;
}
int lastDigit = number % 10;
return getSumOfCubes(number / 10) + lastDigit * lastDigit * lastDigit;
}
}
```

{ static void Main(string[] args)

{

double res;

for (int i = 1; i < 10; i++)

{

for (int j = 1; j < 10; j++)

{

for (int k = 1; k < 10; k++)

{

res = Math.Pow(i, 3) + Math.Pow(j, 3) + Math.Pow(k, 3);

if ( res == int.Parse(i.ToString() + j.ToString() + k.ToString()) )

{

Console.WriteLine(res);

}

}

}

}

Console.ReadLine();

}}

Hope this helps

- PeyarTheriyaa November 09, 2018