HDU 1018

来源:互联网 发布:网络流行语大全网站 编辑:程序博客网 时间:2024/06/05 04:05

又是没看明白题意,后来明白是算阶乘的位数。

本来想用char数组做,后来忍不住翻了下网上的解答,原来如此简单,关键是多动脑啊!

题意:求n!的位数~

由于n!最后得到的数是十进制,故对于一个十进制数,求其位数可以对该数取其10的对数,最后再加1~

易知:n!=n*(n-1)*(n-2)*......*3*2*1

∴lg(n!)=lg(n)+lg(n-1)+lg(n-2)+......+lg(3)+lg(2)+lg(1);

#include<stdio.h>#include<math.h>int main(){int loop=0;int num=0;    scanf("%d",&loop);    while(loop--)    {     scanf("%d",&num);     double sum=0;     for(double i=num;i>=1;i--)     {     //必须用double,否则会出现精度损失        sum+=log10(i);     }     printf("%d\n",(int)(sum+1));    }    return 0;     }


                                             
0 0