大数阶乘。

   今天有人在电脑爱好者论坛上问了一个求1000的阶乘,这其实是N老的问题了,用数组操作。没事就写了一下算法,如下:
#include<stdio.h>
#include<string.h>

int Factorial(int num, int* buffer, int buffer_size)
{
     if(buffer == NULL || buffer_size <= 0 || num < 0)
     {
         return -1;
     }
     if(num == 0)
     {
         buffer[0] = 1;
    return 1;
     }
    
     memset(buffer, 0, buffer_size);
     buffer[0] = 1;
    
     int temp = 0,max_pos = 1;
     for(int _num = 1; _num <= num; ++_num)
     {
    for(int cur = 0; cur <= max_pos; ++cur)
    {
        temp += buffer[cur]*_num;
        buffer[cur] = temp%10;
        temp /= 10;
    }
    while(temp)
    {
        buffer[++max_pos] = temp%10;
        temp /= 10;
    }
     }
    
     return max_pos+1;
}

int main()
{
     int arr[10000];
     int num = 0;
    
     printf("Input data:");
     scanf("%d", &num);
    
     int len = Factorial(num, arr, 10000);
    
     printf("/nResult Length:%d/nResult:", len);
    
     while(--len >= 0)
     {
         printf("%d",arr[len]);
     }
    
     printf("/n");
    
     return 0;
}


思路很简单,所以也没加注释,算法在就OK了。

下面是结果:
Input data:1000

Result Length:2568
Result:4023872600770937735437024339230039
8571937486421071463254379991042993851239
86290205920442084869694048004799886101971
96058631666872994808558901323829669944590
9974245040870737599188236277271887325197
7950595099527612087497546249704360141827
80946464962910563938874378864873371191810
4582578364784997701247663288983595573543
2513185323958463075557409114262417474349
34755342864657661166779739666882029120737
91438537195882498081268678383745597317461
36085379534524221586593201928090878297308
43139284440328123155861103697680135730421
61687476096758713483120254785893207671691
324484262361314125087802080002616831510273
418279777047846358681701643650241536913982
81264810213092761244896359928705114964975
419909342221566832572080821333186116811553
615836546984046708975602900950537616475847
728421889679646244945160765353408198901385
44248798495995331910172335555660213945039
97362807501378376153071277619268490343526
252000158885351473316117021039681759215109
07788019393178114194545257223865541461062
892187960223838971476088506276862967146674
697562911234082439208160153780889893964518
26324367161676217916890977991190375403127
46222899880051954444142820121873617459926
42956581746628302955570299024324153181617
210465832036786906117260158783520751516284
22554026517048330422614397428693306169089
796848259012545832716822645806652676995865
268227280707578139185817888965220816434834
482599326604336766017699961283186078838615
027946595513115655203609398818061213855860
03014356945272242063446317974605946825731
03790084024432438465657245014402821885252
47093519062092902313649327349756551395872
05596542287497740114133469627154228458623
773875382304838656889764619273838149001407
67310446640259899490222221765904339901886
018566526485061799702356193897017860040811
889729918311021171229845901641921068884387
121855646124960798722908519296819372388642
61483965738229112312502418664935314397013
74285319266498753372189406942814341185201
58014123344828015051399694290153483077644
56909907315243327828826986460278986432113
90835062170950025973898635542771967428222
48757586765752344220207573630569498825087
968928162753848863396909959826280956121450
994871701244516461260379029309120889086942
028510640182154399457156805941872748998094
25474217358240106367740459574178516082923
013535808184009699637252423056085590370062
42712434169090041536901059339838357779394
10970027753472000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000



 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值