本文共 386 字,大约阅读时间需要 1 分钟。
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int i,n,cas; double f; cin>>cas; while(cas--) { f=0.0; cin>>n; for(i=2;i<=n;i++) f+=log10(i*1.0); int ans=f+1; cout<<ans<<endl; } return 0;}
/******还是比较有意思的一道题目,比如123456=10^5+1.23456,取对数后为5+log10(1.23456)所以位数为取对数后的小数取整
再加1,不过算阶乘时要注意,当n很大时可能会溢出,所以还是得转换为对数,只需要进行n次加法和乘法就行了,
再次体会到了对数的神奇,记得加头文件cmath***/
转载地址:http://rdgsi.baihongyu.com/