-
Notifications
You must be signed in to change notification settings - Fork 0
/
Problem34.java
63 lines (56 loc) · 1.34 KB
/
Problem34.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.javamultiplex.projecteuler;
import java.math.BigInteger;
public class Problem34 {
//9! * 7 = 2540160
public static int upperBound=2540160;
//one digit number won't generate sum.
public static int lowerBound=10;
public static BigInteger fact[]=new BigInteger[10];
static
{
//fact[0]=1
fact[0]=BigInteger.ONE;
BigInteger temp=null;
for(int i=1;i<10;i++)
{
//convert int to BigInteger.
temp=BigInteger.valueOf(i);
fact[i]=temp.multiply(fact[i-1]);
}
}
public static void main(String[] args) {
String temp=null;
int length=0,sum=0;
for(int i=lowerBound;i<=upperBound;i++)
{
//Convert int to String.
temp=String.valueOf(i);
length=temp.length();
if(isFactorion(temp,length))
{
sum+=i;
}
}
System.out.println("The sum of all numbers which are equal to the sum of the factorial of their digits : "+sum);
}
private static boolean isFactorion(String num, int length) {
int temp=0;
//sum=0
BigInteger sum=BigInteger.ZERO;
String factSum=null;
boolean result=false;
for(int i=0;i<length;i++)
{
//convert char to int.
temp=num.charAt(i)-48;
sum=sum.add(fact[temp]);
}
//convert BigInteger to String.
factSum=String.valueOf(sum);
if(num.equals(factSum))
{
result=true;
}
return result;
}
}