欢迎使用CSDN-markdown编辑器

来源:互联网 发布:桌面的数据都没了 编辑:程序博客网 时间:2024/06/05 03:02

NYOJ69 数的长度

原题地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=69

#include <iostream>#include <cmath>using namespace std;int main(void){    int t, n;    double sum;    cin >> t;    while (t--)    {        cin >> n;        sum = 0;        for (int i=1; i<=n; i++)            sum += log10(i);        cout << (int)sum + 1<< endl;     }    return 0;}

下面谈一谈我的思路。
在十进制数中 10^0是1位数,10^1是2位数,10^2是3位数,依此类推。对于n的阶乘n!,假设它是一个m位的数,可以确定10^(m-1)<= n! < 10^(m),因为10^(m-1)是最小的m位数, 10^(m)是最小的m+1位数。n!有m位,必将大于等于最小的m位数且小于最小的m+1位的数,对该不等式取10为底的对数有 m-1 <= log10(n!) < m。
log10(n!) = log10(n * (n-1) * (n-2) * …… * 1)
对于对数有公式:loga(m*n) = loga(m) + loga(n) 故上式可化为log10(n) + log10(n-1) + log10(n-2) + …… + log10(1)
因此通过此公式可求出log10(n!),向下取整即可求出m-1,进而得到n!的位数m。

0 0
原创粉丝点击