많은 어플리케이션은 매우 큰 수를 사용한다. 이러한 어플리케이션은 데이터를 안전하게 전송하고, 암호화하기 위해서 수를 키로 사용한다.
수가 주어지면, 그 수의 팩토리얼의 자리수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 수가 주어진다. 다음 줄부터 한 줄에 하나씩 정수 m이 주어진다. (1 ≤ m ≤ 107)
첫째 줄부터 차례대로 N개의 줄에 한줄에 하나씩 시리얼 번호를 정렬한 결과를 출력한다.
로그의 곱셈 법칙을 활용한다. => log(AB)=logA+logB
#include<iostream>
#include <cmath>
using namespace std;
int solution(int n) {
double ret=log10l(n);
for (int i = n-1; i >= 1; i--) {
ret += log10l(i);
}
return (int)ret+1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int m;
cin >> m;
int ret= solution(m);
cout << ret << endl;
}
return 0;
}