博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM——1018,Big Number(思维)
阅读量:4049 次
发布时间:2019-05-25

本文共 818 字,大约阅读时间需要 2 分钟。

数学题,用取对数函数就好。

突破口:
公式:log(i+1)!=log(i+1)+log(i)!;
遍历1~1e7内所有数的阶乘,记录下其对于10的对数log10(i),最终输出的数要+1。
代码如下:

#include
#include
using namespace std;double f[2500001]; //需要注意,不能直接定义1e7的double数组,这样会爆内存,5000000也不行,这样就刚刚好int main(){ int n,k; int i; double ans,pre=0; //pre记录阶乘的对数 f[0]=0; for(i=2;i<=10000000;i++) { pre=pre+log10(i); if(i%4==0) //逢4的倍数就存一次 f[i/4]=pre; } scanf("%d",&n); while(n--) { scanf("%d",&k); if(k%4==0) printf("%d\n",(int)f[k/4]+1); else { if(k%4==1) //分类讨论 ans=f[k/4]+log10(k); else if(k%4==2) ans=f[k/4]+log10(k-1)+log10(k); else ans=f[k/4]+log10(k-2)+log10(k-1)+log10(k); printf("%d\n",(int)ans+1); } } return 0; }

小结:对数函数有些时候可以发挥很大的作用。

转载地址:http://afdci.baihongyu.com/

你可能感兴趣的文章
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>