FOJ 1050 Number lengths

一,題目描述

 

 

二,問題分析

1.題目意思爲輸入一個整數N 輸入 N!的位數

2.很明顯常規方法無法實現,當N很大時,N!的階乘就無法表示出來

3.考慮數學方法 位數ans = log10(N!) =  ∑(1≤i≤n)log(i) ,取整後+1

三,代碼解答

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

//公式:ans = log10(n!) =  ∑(1≤i≤n)log(i).

int main() {
	int n;
	while (cin >> n) {
		double res = 0;
		while (n) {
			res = res + log10((double)n);		
			n--;
		}
		cout << (int)res + 1 << endl;;
	}
	return 0;
}

注意:1.用log10()函數需要引入頭文件#include<cmath>

2.根據函數聲明,其參數要使用duoble類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章