高精度,大数的阶乘

求1000!

#include <bits/stdc++.h>
using namespace std;
#define Maxn 1000
int A[Maxn];
int main(){
    int i,j,n;
    scanf("%d",&n);
    memset(A,0,sizeof(A));
    A[0] = 1;//第一位要设置为1,否则结果就全是0了
    for(int i = 2; i <= n; i++){
        int c = 0;
        for(j = 0; j < Maxn; j++){//模拟计算
            int s = A[j]*i + c;
            A[j] = s % 10;
            printf("%d\n",s%10);
            c = s/10;
        }
    }
    //是从后往前计算的,例如115,数组里存的就是511,然后去掉前导0,倒序输出即可
    for(j = Maxn -1; j >= 0; j--){//去掉前导0
        if( A[j] ){
            break;
        }
    }
    for(i = j; i >= 0; i--){
        printf("%d",A[i]);
    }
    cout << endl;
    return 0;
}

  

时间: 2024-10-19 03:33:07

高精度,大数的阶乘的相关文章

链表实现大数类阶乘

链表实现大数阶乘 题目 大数运算--计算n的阶乘 (n≥20). 基本要求 (1)数据的表示和存储: ①累积运算的中间结果和最终的计算结果的数据类型要求是整型--这是问题本身的要求. ②试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值. (2)数据的操作及其实现: 基于设计的存储结构实现乘法操作,要求从键盘上输入n值:在屏幕上显示最终计算结果. 思路 建立大数类(其实好像想麻烦了),不过面向对象的方法还挺好写的,重载乘法,这里我搞麻烦了,一开始重载了大数乘法,其实弄一个大数乘整数就

大数的阶乘

首先要确定这个数的阶乘需要开多大的数组,可以用Stirling公式. 输入不超过10000的正整数,计算n!的具体值. #include<iostream> #include<math.h> using namespace std; const int maxn=50000; int main(){ int n,s,k,c; int f[maxn+1]; while (cin>>n) { memset(f,0,sizeof(f)); f[0]=1; for(int i=

大数的阶乘的准确值

输入不超过1000的正整数你,输出其阶乘的准确的值.求阶乘大家都会,用递归就可以搞定,开销会比较大.阶乘增长是很快的,c语言中int值的范围大小与电脑位数n有关.整数区间为[-2^(n-1),2^(n-1)).在32位pc机上,其最大值为2^31,分析该题假如输入1000!是个很大的数,远远超过int的范围.可以用一个4000个元素的数组保存.从低位到高位依次保存在数组从小到大的角标元素中.代码如下: <pre name="code" class="cpp"&

hdu 1042 N!(大数的阶乘)

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 55659    Accepted Submission(s): 15822 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one

Exponentiation(高精度大数)

Exponentiation Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. This problem requires

Hdu 4762 网络赛 高精度大数模板+概率

注意题目中的这句话he put the strawberries on the cake randomly one by one,第一次选择草莓其实有N个可能,以某一个草莓为开头,然后顺序的随机摆放,所以最后的概率为n/m^(n-1),最后通过大数模板搞定该题的化简. C++代码 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<iomanip> 5 #include

uva 10106 Product(高精度大数乘法)

昨天刚写了个大数加法,今天又来了个大数乘法,其实解法差不多,只不过换成了好多个大数的相加而 已,看别人的算法其实跟我的也差不多,都是这个姿势.wa了一次,竟然忘了考虑0的情况,以后交题之前,都要判 断一下边缘数据,大数据和小数据,要不就是白白被扣时间啊 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; char a[

2017/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】

问题 B: N! 普拉斯 时间限制: 1 Sec  内存限制: 128 MB提交: 114  解决: 35[提交] [状态] [讨论版] [命题人:admin] 题目描述 在处理阶乘时也需要借助计算器. 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:  宝儿姐一直在思考一个问题,N!末尾究竟有多少个0?我们假设N!末尾有k个0,请按照规则打印k. 输入 输入一个正整数n(n< 50) ,输入以EOF结尾. 输出 我们假设N!末尾有k个0,请按照规则打印k,数字之间间隔3列0.

hdu1042 N!(大数求阶乘)

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 94583    Accepted Submission(s): 28107 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in on