高精度算法求n阶阶乘
1 #include "stdio.h"
2 #include "String.h"
3 #define MAX 10000
4 int f[MAX];
5 void Arr_reset(int a[],int m,int n)
6 {
7 int i;
8 for(i=m;i<=m;i++)
9 {
10 a[i]=0;
11 }
12 }
13 int main(void)
14 {
15 int i,j,n;
16 printf("Enter n:");
17 scanf("%d",&n);
18 Arr_reset(f,0,(sizeof(f)/sizeof(int)));//对数组进行初始化
19 f[0]=1;
20 for(i=2;i<=n;i++)
21 {
22 //乘以 i
23 int c=0;
24 for(j=0;j<MAX;j++)//最不易理解的
25 {
26 int s=f[j]*i+c;
27 f[j]=s%10;
28 c=s/10;
29 //算出的 s 是单位数时,会连续覆盖 f[0]
30 //否则一个多位数会倒过来存储,如 123,f[0]存 3,f[1]存 2,f[3]存 1
31 //因此上式先求余,在求模
32 }
33 }
34 for(j=MAX-1;j>=0;j--)
35 if(f[j])
36 break;//忽略前导 0
37 for(i=j;i>=0;i--)
38 printf("%d",f[i]);
39 printf("\n");
40 return 0;
41 }
#include<iostream>
using namespace std;
int main()
{
int a[10000];
int n;
cout<<"请输入n 计算n的阶乘"<<endl;
while(cin>>n&&n>=0)
{
a[0]=1;
int temp=0;
int digit=1; for(int i=2;i<=n;i++)//该for循环对于大于2的阶乘才奏效。
{
int num=0;
for(int j=0;j<digit;j++)
{
temp=a[j]*i+num;
a[j]=temp%10;
num=temp/10;
}
while(num)
{
a[digit]=num%10;//越前存储比如f[0]存4不动,f[1]存2。
num/=10;
digit++;
}
}
for(int i=digit-1;i>=0;i--)//反转输出,先输出f[1]为2,再输出f[0]为4。
{
cout<<a[i];
}
cout<<endl;
}
return 0;
}
不懂 没注释 存疑
高精度算法求n阶阶乘的更多相关文章
- n阶高精度乘法,(求高阶阶乘)
先来复习一下小学数学 : 大家还记不记得小学算多位数的乘法是怎么算的? 卖个关子,大家一定要好好想想! 好了,别管到底还能不能想起来我们都要一块复习一下: 我们借助一下源自百度的图片 来复习下 相信大 ...
- 求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N! N阶阶乘求和算法 JAVA C Python
一行代码算出1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N! N阶阶乘求和 时间复杂度为O(n) 空间复杂度为O(1) 对于任意正整数N 求1!-N!一行算出和给定求1 ...
- 【严蔚敏】【数据结构题集(C语言版)】1.17 求k阶斐波那契序列的第m项值的函数算法
已知k阶斐波那契序列的定义为 f(0)=0,f(1)=0,...f(k-2)=0,f(k-1)=1; f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,... 试编写求k阶斐 ...
- 【洛谷】P1009 阶乘之和——高精度算法
题目描述 用高精度计算出S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...
- 笔试算法题(02):N阶阶乘 & 双向循环链表实现
出题:N阶阶乘问题的递归算法和非递归算法: 分析: 第一种解法:普通暴力解法的实现较为容易: 第二种解法:stirling公式可快速给出近似解: 解题: int Recursive(int s) { ...
- c++减法高精度算法
c++高精度算法,对于新手来说还是一大挑战,只要克服它,你就开启了编程的新篇章,算法. 我发的这个代码并不是很好,占用内存很多而且运行时间很长(不超过0.02秒),但是很好理解,很适合新手 高精算法的 ...
- 汇编语言-求X的阶乘
1. 题目:求X的阶乘值 2. 要求:输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现. 3. 提示:可以用递归来实现,也可以用简单的循环来实现. 这里使用循环来实现: 对 ...
- 求N的阶乘N!中末尾0的个数
求N的阶乘N!中末尾0的个数 有道问题是这样的:给定一个正整数N,那么N的阶乘N!末尾中有多少个0呢?例如:N=10,N=3628800,则N!的末尾有两个0:直接上干货,算法思想如下:对于任意一个正 ...
- 高精度算法(C/C++)
高精度算法 (C/C++) 做ACM题的时候,经常遇到大数的加减乘除,乘幂,阶乘的计算,这时给定的数据类型往往不够表示最后结果,这时就需要用到高精度算法.高精度算法的本质是把大数拆成若干固定长度的块, ...
随机推荐
- 告别硬编码,让你的POI导入导出拥抱变化
GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...
- 1.9Hadoop插件
- javaweb修改表单参数---使用过滤器
需求: 所有的字段要将空字符串转成null: 问题: 我们知道表单如果不写值的时候,传递到后台的不是null,而且是空字符串.那么怎么改成null呢? 解决: 使用过滤器,将请求的参数修改过后继续,再 ...
- 几个超级实用但很少人知道的 VS 技巧[更新]
大家好,今天分享一些实用的 VS 技巧,而这些技巧我发现很多人都不知道.因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS "骚"操作,他们 ...
- [BJDCTF 2nd]文件探测
[BJDCTF 2nd]文件探测 这两天刷题碰到了一道稍微有难度的题,记录一下,有一些点是未被掌握到的. home.php: <?php setcookie("y1ng", ...
- python ---倒酒!!
#!/usr/bin/env python3# -*- coding: utf-8 -*-import numbersimport numpyimport math'''三个容器分别为12升.8升.5 ...
- JMeter Websocket 二进制Binary压力测试或接口测试
背景 最近在做游戏项目,做好java服务端,需要本地调试Websock服务,并且是二进制binary形式传输,网上的很多都是text形式传输的测试页面,所以不符合要求.为了解决websocket的二进 ...
- Python-全局解释器锁GIL原理和多线程产生原因与原理-多线程通信机制
GIL 全局解释器锁,这个锁是个粗粒度的锁,解释器层面上的锁,为了保证线程安全,同一时刻只允许一个线程执行,但这个锁并不能保存线程安全,因为GIL会释放掉的并且切换到另外一个线程上,不会完全占用,依据 ...
- P6810 「MCOI-02」Convex Hull 凸包
Link 一句话题意: 求出 \(\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\tau(i)\tau(j)\tau(gcd(i,j))\) 前置知识 \(diri ...
- python中random的一些用法
#(1)随机小数 import random print(random.random()) #随机大于0 且小于1 之间的小数 ''' 0.9441832228391154 ''' print(ra ...