http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33695    Accepted Submission(s): 15894 Problem Description In many applications very lar…
题意: 给一个数n,返回该数的阶乘结果是一个多少位(十进制位)的整数. 思路: 用对数log来实现. 举个例子 一个三位数n 满足102 <= n < 103: 那么它的位数w 满足 w = lg103 = 3. 因此只要求lgn 向下取整 +1就是位数.然后因为阶乘比如5阶乘的话是5 * 4 * 3 * 2 * 1.位数就满足lg 5 * 4 * 3 * 2 * 1 = lg5 + lg4 + lg3 + lg2 + lg1.用加法就不会超过数字上限. 当然这是十进制下得.如果是m进制下 ,…
题意是求 n 的阶乘的位数. 直接求 n 的阶乘再求其位数是不行的,开始时思路很扯淡,想直接用一个数组存每个数阶乘的位数,用变量 tmp 去存 n 与 n - 1 的阶乘的最高位的数的乘积,那么 n 的阶乘的位数就等于 n - 1 的阶乘的位数加 tmp 的位数再减去 1. 但这种做法是不对的,例如有可能最高位与 n 的乘积结果是 99,而其实 n 与其他位的乘积结果是能进到这一位的,也就是说实际应该在 n - 1 的阶乘位数上增加 2 ( 3 -1 ) 位.而在对样例测试时也发现 n 为 10…
我们知道整数n的位数的计算方法为:log10(n)+1n!=10^m故n!的位数为 m = log10(n!)+1 lgN!=lg1+lg2+lg3+lg4+lg5+....................+lgN; 但是当N很大的时候,我们可以通过数学公式进行优化:(即Stirling公式) N!=sqrt(2*pi*N)*(N/e)^N:(pi=3.1415926=acos(-1.0),e=exp(1)) lgN!=(lg(2*pi)+lgN)/2+N*(lgN-lge); 斯特林公式可以用…
题目: 分析: 这道题目要求的是n!的位数,显然一种思路是先求出n!的值,假定为res,然后再计算res的位数,这种方法在n比较小时是可以的,如果res为int型,一旦n>16,res就会超出int范围,如果为double型,当n>170时也会出错,而此题的n最大可以为25000,显然没办法先求出res.当然,如果通过数组去模拟,也是可以的,但是对于此题来说太过麻烦,所以换种思路来做.如果是要求n!的值,那就只能通过数组去模拟了,但是我们现在只要求n!的位数即可,那么就可以边算阶乘,边算位数.…
A. 草滩的魔法学校 分析: 高精度乘法 或 JAVA大数类 很明显 10000 的阶乘已经远远超过 64 位数能表示的范围了.所以我们要用一个比较大的数组来存放这个数.那数组要开多少位合适呢?我们不妨计算一下 10000 个 10000 相乘有多少位,是一个 40000 位数.所以 40000 大小的数组肯定够了.接下来就是模拟一下乘法运算.因为数位太大不能直接相乘,所以我们就逐位相乘.相乘得到的数的个位是结果的对应位置的数字,然后除以 10 把进位保留下来,加到下一次乘法中. 在输出的时候注…
求某个大数的阶乘的位数 . 得到的值  需要 +1 得到真正的位数 斯特林公式在理论和应用上都具有重要的价值,对于概率论的发展也有着重大的意义.在数学分析中,大多都是利用Г函数.级数和含参变量的积分等知识进行证明或推导,很为繁琐冗长.近年来,一些国内外学者利用概率论中的指数分布.泊松分布.χ²分布证之. #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #incl…
题意: 给出两个数字a和b,求a的阶乘转换成b进制后,输出 (1)后缀中有多少个连续的0? (2)数a的b进制表示法中有多少位? 思路:逐个问题解决. 设a!=k.  k暂时不用直接转成b进制. (1)阶乘后缀0问题.先看这个十进制后缀0的例子:http://www.cnblogs.com/xcw0754/p/4604473.html 解法差不多,稍变化. 首先将b分解成若干质数(比如8={2*2*2})保存在一个集合A中(注意自然数的质数分解是唯一的),只要有一个序列A就能构成一个0,因为满b…
描述 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 /* NYOJ69 阶乘数位长度 * 方法一: * 可设想n!的结果是不大于10的M次幂的数,即n!<…
1058 N的阶乘的长度基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3.Input输入N(1 <= N <= 10^6)Output输出N的阶乘的长度Input示例6Output示例3思路:位数公式 则有: 循环遍历即可 代码: #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with…