51Nod-1057-N的阶乘
2017-08-22 10:11
281 查看
51Nod-1057 N的阶乘
就python而言,直接暴力计算就行,不必担心变量的数据范围。
代码如下:
还有一种优化阶乘计算的解法,具体解法的方法在这里就不详细讲解了,在这里打开大佬的博客传送门——N 的阶乘的另一种解法
代码如下:
此题如果用C语言解题,有些棘手,因为阶乘算出的结果有些连长整型都无法存储。那么就需要分段存入一数组里,每次超过某一个数后,如以1e8为界限,把数据分成两段存入。输出的时候倒序输出数组里存储的结果。
C语言解法的大佬博客—— 51Nod-1057-N的阶乘
1057 N的阶乘 输入N求N的阶乘的准确值。 Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 120
就python而言,直接暴力计算就行,不必担心变量的数据范围。
代码如下:
while True: try: n, ans = int(input()), 1 for i in range(1, n+1): ans *= i print(ans) except EOFError: break
还有一种优化阶乘计算的解法,具体解法的方法在这里就不详细讲解了,在这里打开大佬的博客传送门——N 的阶乘的另一种解法
代码如下:
maxn = 10001 #判段素数的数组 isprime = [True]*maxn #存入各个素数的阶数 cnt = [0]*maxn #素数列表 prime = [] #素数打表 def Prime(n): for i in range(2, n): if isprime[i]: prime.append(i) for k in prime: if i*k >= n: break isprime[i*k] = False #计算素数的阶数 def func(n): for p in prime: if p > n: break sum = 0 num = p while num <= n: sum += n // num num = num*p cnt[p] = sum #乘法快速幂 def power(a, b): ans = 1 while b: if b&1: ans = ans*a a = a*a b >>= 1 return ans Prime(maxn) while True: try: n, ans= int(input()), 1 func(n) for p in prime: if p > n: break ans *= power(p, cnt[p]) print(ans) except EOFError: break
此题如果用C语言解题,有些棘手,因为阶乘算出的结果有些连长整型都无法存储。那么就需要分段存入一数组里,每次超过某一个数后,如以1e8为界限,把数据分成两段存入。输出的时候倒序输出数组里存储的结果。
C语言解法的大佬博客—— 51Nod-1057-N的阶乘
相关文章推荐
- 51nod 1057 N的阶乘
- 51nod_1057 N的阶乘(大数)
- 51nod 1057 N的阶乘 (水题ing……)
- 51nod 1057 N的阶乘(大数-划分)
- 51Nod-1057-N的阶乘
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51Nod 1057 N的阶乘(数论)
- 51nod 1057 N的阶乘
- 51Nod 1057 N的阶乘(模拟进制&进位)
- 51NOD 1057 N的阶乘
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 大数阶乘(10000级别) 51Nod 1057
- 51Nod-1057 N的阶乘
- 【51NOD-0】1058 N的阶乘的长度
- 51nod 1130 N的阶乘的长度 V2(斯特林近似)
- 51Nod 1003 阶乘后面0的数量
- 51nod 1130 N的阶乘的长度 V2(斯特林近似)