본문 바로가기

코딩 테스트/Project Euler @ kr

34) 각 자릿수의 팩토리얼을 더했을 때 자기 자신이 되는 수들의 합은?

반응형

http://euler.synap.co.kr/prob_detail.php?id=34


Skillist 설명---------------------------------------------------------------------------------


public static void main(String[] args){

int total = 0;

for(int i=3;i<=2540160;i++){ //8자리의 최대값 = 9! * 8 = 2903040(7자리) 

int sum = 0; //따라서 7자리의 최대값인 2540160가 종료시점

int now = i;

while(now!=0){

sum+=fac(now%10); //각 자릿수의 팩토리얼 구해서 sum에 더하기

now/=10;

}

if(sum == i){

total += sum; //각 자릿수 팩토리얼의 합 = 자기 자신

}

}

System.out.println(total);

}

static int fac(int a){

if(a==1 || a==0){ //1! = 0! = 1

return 1;

}

int mul=1;

for(int i=2;i<=a;i++){ //팩토리얼 계산

mul *= i;

}

return mul;

}


다시 공부------------------------------------


public static void main(String[] arg){

int total = 0;

for(int i=2999999;i>2;i--){

int temp = i;

int sum = 0;

while(temp>0){

sum+=fac(temp%10);

temp/=10;

}

if(sum==i){

total+=sum;

}

}

System.out.println(total);

}

public static int fac(int n){

if(n==0 || n==1){

return 1;

}else{

return n*fac(n-1);

}

}

반응형