[PS] 백준 7894번 큰수

jh.cin·2021년 7월 5일
0

문제

많은 어플리케이션은 매우 큰 수를 사용한다. 이러한 어플리케이션은 데이터를 안전하게 전송하고, 암호화하기 위해서 수를 키로 사용한다.

수가 주어지면, 그 수의 팩토리얼의 자리수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 수가 주어진다. 다음 줄부터 한 줄에 하나씩 정수 m이 주어진다. (1 ≤ m ≤ 107)

출력

첫째 줄부터 차례대로 N개의 줄에 한줄에 하나씩 시리얼 번호를 정렬한 결과를 출력한다.

풀이(C++ 코드)

로그의 곱셈 법칙을 활용한다. => 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;
}
profile
그냥 프로그래머

0개의 댓글