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 × 9 × ... × 3 × 2 × 1 = 3628800 이 되는데,
여기서 10!의 각 자리수를 더해 보면 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 입니다.
100! 의 자리수를 모두 더하면 얼마입니까?
단순 계산. 너무 큰 수이므로 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>
댓글 없음:
댓글 쓰기