习题 92:高精度算阶乘★★

原创 2008年09月28日 14:35:00

 /*题目描述:
算出n!的完整结果,其中n!=1*2*3*...*n

输入:
多组测试数据,一行一组,每行仅一个数n
其中0<=n<=10000

输出:
输出相应的n!的结果,必须精确到个位

样例输入:
10
20
100

样例输出:
3628800
2432902008176640000
933262154439441526816992388562667004907159682643816214685929
638952175999932299156089414639761565182862536979208272237582
51185210916864000000000000000000000000

其它信息:
最后一个100!的结果由于过长,故拆分成三行,每行60字符,请见谅

难度:Easy

*/

#include <iostream>
#include <iomanip>
#define MAX_SIZE 10000
using namespace std;
//end is the last updated bit
int bigMulti(int *result, int n,int size, int end)
{
    int i,j, carry, tmp;
    carry = 0;
    for(j = 1;j <= n; j++)
    {
        for(i = MAX_SIZE; --i >=end;)
        {
            tmp = result[i] * j + carry;
            result[i] = tmp % 10000;
            carry = tmp / 10000;
        }
        while(carry)
        {
            result[--end] = carry % 10000;
            carry /= 10000;
        }
    }
    return end;
}
int main(void)
{
    int n, end;
    int result[MAX_SIZE];//    while(EOF!=scanf("%d",&n))
    {
        memset(result,0,MAX_SIZE*sizeof(int));
        result[MAX_SIZE - 1] = 1;// set result to 1
        end = MAX_SIZE - 1;
        end = bigMulti(result, n,MAX_SIZE, end);
        cout << result[end++];
        for(; end < MAX_SIZE;)
        {
            printf("%04d",result[end++]);
        }
        cout << endl;
        //result[j] = 0;
        //cout << result << endl;
    }
    return 0;
}
/*result:
78737

Name: "younthu" Problem ID "92"
Submit Time: 2008/9/28-13:35

G++: Compile OK

Test  1:    Accepted    Time = 0 ms
Test  2:    Accepted    Time = 0 ms
Test  3:    Accepted    Time = 267 ms
--------------------------------
Problem ID     92
Test Result    Accepted
Total Time     267 ms
Total Memory   228 Kb / 2000 Kb
Code Length    817 Bytes
*/

(C语言)高精度阶乘

题目描述 启明星软件组组长听说我们会乘法之后,立马让我们帮他算一下阶乘(怎么有这么坏的组长)。 此题也很简单只需要算一下不大于100的数n的阶乘就好了,看我多好数据一下子少了10倍哦! ...
  • YiMo_Fan
  • YiMo_Fan
  • 2017年04月22日 21:43
  • 504

C++ 高精度算法及N的阶乘

高精度算法
  • innounce
  • innounce
  • 2017年03月10日 22:27
  • 354

蓝桥杯-阶乘计算(VIP高精度)

问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*n。 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A...
  • slightfeverGK
  • slightfeverGK
  • 2016年02月22日 19:15
  • 966

JAVA高精度1_大数相加_阶乘

第一道:http://acm.hdu.edu.cn/showproblem.php?pid=1002 最基础的一个大数问题,位数可以到达1000位,以前用C做的时候用字符串处理加翻转来做,现在...
  • major_zhang
  • major_zhang
  • 2017年01月21日 20:57
  • 533

蓝桥杯:基础练习 阶乘计算 高精度加法

基础练习 阶乘计算   时间限制:1.0s   内存限制:512.0MB        问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*...
  • catchingSun
  • catchingSun
  • 2016年03月21日 13:00
  • 868

用高精度方法计算n! ,并显示n!(阶乘)的值。

【问题描述】  对于任意给定的n值(n为整数,且1 【样例】 输入:n= 10 输出: 3628800 又输入:n= 20 输出: 2432902008176640000 使用整型数组...
  • Hackbuteer1
  • Hackbuteer1
  • 2011年08月22日 15:51
  • 8646

高精度算阶乘

/*习题 92:高精度算阶乘★★题目描述:算出n!的完整结果,其中n!=1*2*3*...*n输入:多组测试数据,一行一组,每行仅一个数n其中0输出:输出相应的n!的结果,必须精确到个位样例输入:10...
  • namgking
  • namgking
  • 2008年10月29日 21:55
  • 517

计算大数阶乘--Pascal版

先给出代码: program fac; var i,j,n,len: integer; rad,c,r: longint; buff: array[1..16000] of...
  • liangbch
  • liangbch
  • 2012年05月30日 17:16
  • 1854

算法篇-高精度-阶乘的精确值

题目:输入不超过1000的正整数n,输出n!=1x2x3···xn的精确结果。 样例输入:30 样例输出:265252859812191058636308480000000   代码如下: ...
  • Liuchang54
  • Liuchang54
  • 2015年04月03日 20:43
  • 1898

java竞赛-大数阶乘问题

Java计算阶乘(n!)需要使用实现使用BigDecimal类,因为用int最多正确算到12!,用long最多正确算到20! 计算机中提供了长整型和双精度等能存储较大数的数据类型,但在有些时候,这样...
  • LucasXu01
  • LucasXu01
  • 2015年12月06日 17:50
  • 2218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:习题 92:高精度算阶乘★★
举报原因:
原因补充:

(最多只允许输入30个字)