高精度阶乘

#include<stdio.h>
#include<string.h>
const int maxn=3000;
int f[maxn];
int main(void)
{
int i,j,n;
scanf("%d",&n);
memset(f,0,sizeof(f));
f[0]=1;
for(i=2;i<=n;i++)
{
int c=0;
for(j=0;j<maxn;j++)//f[]中的每个数的都乘i
{
int s=f[j]*i+c;
f[j]=s%10; //低位
c=s/10; //进位
}
}
for(j=maxn-1;j>=0;j--)
if(f[j]) break;
for(i=j;i>=0;i--)
printf("%d",f[i]);
printf("\n");
return 0;
}

时间: 2024-10-05 23:47:30

高精度阶乘的相关文章

中石油-高精度阶乘-java

问题 F: [高精度]高精度阶乘 时间限制: 1 Sec  内存限制: 64 MB提交: 49  解决: 13[提交][状态][讨论版] 题目描述 <魔法宝典>对于修罗王是如此重要,是因为<宝典>里记载了很多匪夷所思的魔法原理.例如很久以前,主流魔法界认为传说中的隐身衣是无法实现的,他们的理论是光线进入人的眼睛才能引起视觉,如果有隐身衣存在,则其中的人由于没有光线进入眼中也就看不见外面的情况.但是后来横空出世的<宝典>里却详细叙述了数种隐身衣的实现原理并成功地将之实现.

【高精度】高精度阶乘

问题 F: [高精度]高精度阶乘 时间限制: 1 Sec  内存限制: 64 MB提交: 297  解决: 58[提交] [状态] [讨论版] [命题人:] 题目描述 <魔法宝典>对于修罗王是如此重要,是因为<宝典>里记载了很多匪夷所思的魔法原理.例如很久以前,主流魔法界认为传说中的隐身衣是无法实现的,他们的理论是光线进入人的眼睛才能引起视觉,如果有隐身衣存在,则其中的人由于没有光线进入眼中也就看不见外面的情况.但是后来横空出世的<宝典>里却详细叙述了数种隐身衣的实现原

算法:高精度阶乘

问题描述:        输入一个正整数n,输出n!的值,这里的阶乘结果必须是完全准确的,每一位都需要被精确输出,而且这里的计算结果有可能会非常巨大,超过计算机中的任何数据类型.        阶乘的计算公式:n!=1*2*3*…*n. 解题思路:        对于高精度要求的计算,我们一般的思路是如何准确拆解并分析每一个最小元素,如何精确保存每一位元素,最终又如果把它们揉合成一个整体.        对于这一个问题,我们的首要思路是:            1. 把最大元素拿来做每位拆分,并

4.n的高精度阶乘---优化

题目:对于每组测试数据,在一行中给出一非负整数n(n小于等于100) 样例输入 3 5 10 样例输出 6 120 3628800 超时的代码如下:#include <iostream>#include <cstring>using namespace std; int main(){    int n, count = 0;    int a[100] = {1};    cin >> n;    if(n == 0){        cout << 1;

高精度阶乘的运算

阶乘:1x2x3x4.....N,仿照2的N次方的手法,只不过这次从前往后计算,得到的数从左往后,依次为个位十位百位...等等.例如:021,表示120 #include <iostream> using namespace std; #define max 100 /*保存结果的数组长度*/ int f[max]; int main() { int n=10; /*n表示n!,自由修改*/ f[0] = 1; for(int i = 2;i <= n;i++) { int c = 0;

用C++实现:高精度阶乘

问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*…*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值. 输入格式 输入包含一个正整数n,n<=1000. 输出格式 输出n!的准确值. 样例输入 10 样例输出 3628

高精度:阶乘之和

题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50)S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5×4×3×2×1 输入格式 一个正整数NNN. 输出格式 一个正整数SSS,表示计算结果. 输入输出样例 输入 #1  3 输出 #1  9思路:用到了两种高精度,阶乘高精度和加法高精度.高精度阶乘有两种代码: 1 void JieCheng(int a[], int c) 2 { 3 for (int i =

8617&#160;阶乘数字和

时间限制:500MS  内存限制:1000K 提交次数:224 通过次数:64 题型: 编程题   语言: C++;C Description 我们知道一个数的阶乘n! = 1*2*……*n一般是一个很大的数.现在要计算的是一个数阶乘之后得出来的数所有位上的数字相加的和. 输入格式 输入为多case输入.每个case只有一行,输入一个正整数n(1<=n <= 50),当输入0时结束 输出格式 一个整数. 输入样例 5 2 0 输出样例 3 /*这里模拟了大数乘法来计算高精度阶乘*/ #incl

高精度运算 Java算法

问题描述  输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述  由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理.  定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推.同样可以用一个数组B来存储b.  计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10.然后计算A[1]与