Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

G1sTagList

Posts List

2012년 3월 3일 토요일

[Project Euler] 20. 100! 의 자리수를 모두 더하면?

20. 100! 의 자리수를 모두 더하면?
n! 이라는 표기법은 n × (n − 1) × ... × 3 × 2 × 1을 뜻합니다.

예를 들자면 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 이 되는데,
여기서 10!의 각 자리수를 더해 보면 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 입니다.

100! 의 자리수를 모두 더하면 얼마입니까?
Click

단순 계산. 너무 큰 수이므로 10의 10승씩 잘라서 배열에 넣어가며 계산.
<script>
/** 모든 배열의 각 자릿수를 더한 값.
 * @param {int[]} n : 배열.
 * return {int} 
 */
function sumDigitArray(n){
 var l = n.length;
 
 var sum = 0;
 for (var i = 0; i < l; i++) {
  temp = n[i];
  while (temp != 0) {
   sum += temp % 10;
   temp = parseInt(temp/10);
  }
 }
 return sum;
}
/* n!의 값을 10의자리씩 잘라서 배열로 return;
 * @param {Object} n : 
 */
function factorial(n){
    var r = new Array();
    r[0] = 1;
    var cnt = 0;
    for(var i=1; i<=n; i++){
        for(var j=cnt; j>=0; j--){
            r[j] *= i;
            if(r[j] > 1000000000){
                if(j==cnt)
                    r[++cnt]= parseInt(r[j]/1000000000);
                else
                    r[j+1]+=parseInt(r[j]/1000000000);
                r[j] = r[j]%1000000000
            }
        }
    }
    return r;
}
function p020(n){
    alert(sumDigitArray(factorial(n)));
}
</script>

댓글 없음:

댓글 쓰기