NYOJ 69 阶乘位数长度
2015-07-21 15:40
281 查看
难度:1
描述
N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?
输入首行输入n,表示有多少组测试数据(n<10)
随后n行每行输入一组测试数据 N( 0 < N < 1000000 )输出对于每个数N,输出N!的(十进制)位数。样例输入
样例输出
思路详解:改程序使用lg1*2*3*...*(n-1)*n=lg1+lg2+lg3+..+lg(n-1)+lgn来做,首先使用math头文件,然后使用for循环对sun累加,sum=lgj,当然,这里的sum是double类型,累加后,对sum取整,然后加1,即为要求的位数,如lg1000=3;而1000是4位数,当然只要不大于10000,之间的数都是4位数,若是10000,则lg=4,再加1还是5位数,所以这个方法值得借鉴,但当n比较大时,耗费时间较长,可以借鉴斯特林公式。
描述
N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?
输入首行输入n,表示有多少组测试数据(n<10)
随后n行每行输入一组测试数据 N( 0 < N < 1000000 )输出对于每个数N,输出N!的(十进制)位数。样例输入
3 1 3 32000
样例输出
1 1 130271
#include<stdio.h> #include<math.h> int main() { int i,j,k; double sum; int n,N; scanf("%d",&n); while(n--) { sum=0; scanf("%d",&N); for(j=1;j<=N;j++) sum+=log10(j); k=(int)sum+1; printf("%d\n",k); } return 0; }
思路详解:改程序使用lg1*2*3*...*(n-1)*n=lg1+lg2+lg3+..+lg(n-1)+lgn来做,首先使用math头文件,然后使用for循环对sun累加,sum=lgj,当然,这里的sum是double类型,累加后,对sum取整,然后加1,即为要求的位数,如lg1000=3;而1000是4位数,当然只要不大于10000,之间的数都是4位数,若是10000,则lg=4,再加1还是5位数,所以这个方法值得借鉴,但当n比较大时,耗费时间较长,可以借鉴斯特林公式。
相关文章推荐
- 类QQ点击图片看大图
- 【玩转cocos2d-x之四十】如何在Cocos2d-x 3.0中使用opengl shader?
- 数字图像处理之伽马(gamma)变换
- stepify:轻松整合Node.js异步工作流
- 正则表达式
- ubuntu上github的安装与使用
- 转载:火狐的默认样式表
- Linux内核进程管理
- HackerRank "Sherlock and Cost"
- 在Python的Django框架中显示对象子集的方法
- C语言调用mysql的存储过程
- C#在RichTextBox中显示不同颜色文字的方法
- 很好的关于Block的使用简介
- Mysql存储过程_一次性建立多张表
- 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
- 看log的重要性
- CRUD---数据库SQL操作
- POJ 1068 Parencodings (模拟),暑假第一题~
- POJ 1068 Parencodings (模拟),暑假第一题~
- HTML学习笔记——选择器