欧拉工程第34题:Digit factorials

题目链接:https://projecteuler.net/problem=34
一个数等于各位数字的阶乘,求满足这个条件的数的和。
就两个数:145和40585
上界不知道的时候试大的数,知道结果了,改小点。
java代码:

package projecteuler31to40;

import java.util.Date;

class level34{
    void solve(){
        int Max_Value=50000;

        int allsum=0;
        int remainder=0;
        int[] Factorial={1,1,2,6,24,120,720,5040,40320,362880};
        for(int i=100;i<=Max_Value;++i){
            int num=i;
            int sum=0;
            while(num!=0){
                remainder=num%10;
                sum+=Factorial[remainder];
                num=num/10;
            }
            if(i==sum) {
                allsum+=i;
                System.out.println(sum);
            }
        }
        System.out.println(allsum);
    }
    long Fact(int num){
        if(num==0 ||num==1){
            return 1;
        }else{
            return Fact(num-1)*num;
        }
    }

}
public class Problem34 {

    public static void main(String[] args){
        Date beginTime=new Date();
        new level34().solve();
        Date endTime=new Date();
        Long Time=endTime.getTime()-beginTime.getTime();
        System.out.println("Time="+Time/1000+"秒"+Time%1000+"毫秒");
    }
}

5ms

Python代码:

fact=[1,1,2,6,24,120,720,5040,40320,362880]
allsum=0
for i in range(100,50000):
    num=i
    split=0
    while num!=0:
        remid=num%10
        split+=fact[remid]
        num=num//10
    if i==split:
        allsum+=i
        print i
print allsum

直接根据java代码,写的。。。

你可能感兴趣的:(java,python,欧拉工程)