求一个数的数位
来源:互联网 发布:java培训出来找工作难 编辑:程序博客网 时间:2024/05/22 00:39
Big Number
题意:求一个数n!的位数;
思路:公式: n = n * (n - 1) * (n - 2) * .....* 1 的位数为 == (int) lg(n !) + 1 ==(int)[ lg(n) + lg(n - 1) + lg(n - 2) + lg(n - 3) + ..... + lg(1) ] + 1;
推导:比如这个数,我随便打一个哈: 3672489478 == 3.672489478 * 10 ^ 9 ;
位数的话就是 10 == 9 + 1 == (int)lg(3672489478) + 1 == (int)lg( 3.672489478 * 10 ^ 9 ) + 1 == 9 + 1;
所以这个定理可以运用到一些数的求位数上面了,对它求lg,再加个 1 就行了;然后求lg就可以转成lg(因数)相加了;
还说一点:这个也许是精度的需要吧,在相加的时候我定义成float相加的wa了,也是哈,以后这样的都定义成double 吧;
#include<bits/stdc++.h>using namespace std;int main(){ int Tcase; scanf("%d",&Tcase); for(int ii = 1; ii <= Tcase ;ii ++) { int n; scanf("%d",&n); int ans ; double temp = 0; for(int i = 2 ;i <= n ; i ++) { temp += log10(i * 1.0); } ans = 1 + (int)temp; cout << ans << endl; } return 0;}
0 0
- 求一个数的数位
- 位运算 - 判断一个数是否为2的n次方 | 求一个数位为1的个数
- hdu3709(求区间内平衡数的个数)数位dp
- 求一个数的阶乘
- 求一个数的最小公倍数
- 求一个数的最大公约数
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的平方
- 求一个数的阶乘
- 求一个数的质因数
- 求一个数的二进制
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的平方根
- 求一个数的阶乘
- 求一个数的平方根
- POJ 1240 Pre-Post-erous! 前序+后序遍历判断树的形状的数量
- [UESTC 1256]昊昊爱运动
- Linux学习之新手必知的26 个命令
- java中volatile关键字的使用
- HBase设计与开发性能优化(转)
- 求一个数的数位
- 华为2016上机考试第二题
- Linux c==嵌入式文件编程(1)
- OpenGL ES 着色器
- 第6节--决策树算法实现(scikit-learn)
- 可扩展Web架构与分布式系统(转)
- 流程绩效实战管理六步法
- 工业防火墙与传统防火墙的区别
- 基于ZooKeeper的Dubbo注册中心