数学建模社区-数学中国

标题: 求n!的算法!! [打印本页]

作者: 1084595218    时间: 2010-9-15 23:29
标题: 求n!的算法!!
求n!的算法!!能算出1000!
作者: linmatsas    时间: 2010-9-15 23:48
呜呜…………不知道呀………………
作者: 我就是独狼    时间: 2010-9-16 00:02
晕~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: 雪花V飘飘    时间: 2010-9-16 00:08
知道了,告诉我一声啊
作者: restures    时间: 2010-9-16 08:00
我回不抢呢 考虑再三 还是不抢了吧 ^_^
作者: 798484315    时间: 2010-9-16 08:21
用数组存啊~
作者: jkuo    时间: 2010-9-16 12:00
声明一下:本人看贴和回贴的规则,好贴必看,精华贴必回。
作者: 1084595218    时间: 2010-9-16 13:34
..............................................
作者: leuse    时间: 2010-9-16 15:00
楼主,你写得实在是太好了。我惟一能做的,就只有把这个帖子顶上去这件事了
作者: tengfei110    时间: 2010-9-16 20:00
留个脚印```````
作者: 6601750    时间: 2010-9-30 00:18
#include<iostream>
4 ]- J; f, W+ \1 |: a* F& B/ _using namespace std;
% c/ Y. R* z: v# D7 H; N) h2 t#define dd 1000000000
+ o" N2 x4 W- P+ Y  @#define maxn 360002 |- B& x4 v3 ~2 S: M- e8 S
__int64 a[maxn];& X- _& z- B6 i( u5 l6 U
int digit; //位数.) h4 Q  i5 `$ |* L$ o
void solve(int n)* h5 t0 x7 c. ?2 O' {
{5 d$ a3 n. j& V9 g' {/ k
   digit=1;
7 {2 q5 y8 U( L   int i,j;" J2 p  H% `5 l5 N# n1 [
   memset(a,0,sizeof(a));, B/ T0 i2 L3 ]# F
   a[0]=1;
4 ~1 l" V' z6 B   for(i=2;i<=n;i++)
! V: G& c1 D" _# k; }   {
; K. j1 [* I1 t+ t  q$ n% r5 Y       for(j=0;j<digit;j++)( e4 \6 g% N5 X( A& ~) v: L: m& e
       {7 {  ?' C+ }$ A$ V7 U
           a[j]*=i;
- h: ~" y7 _8 T% W       }1 C+ Z& i1 i7 X, U( b
       for(j=0;j<digit;j++)
3 m9 d) Z( h5 a       {
1 i! ~0 ^. e5 _8 B2 V( ~           if(a[j]>=dd)" n, w% x; a* |8 i( K5 b: z4 V7 v
           {
+ e7 k- F1 D9 m4 a+ E  w0 i               if(j==digit-1) digit++;' [$ c* ?  N" x$ D
               a[j+1]+=a[j]/dd;
: G6 x" U% n1 R% ^$ E               a[j]=a[j]%dd;
+ _8 k  s1 V$ X2 J: a$ C           }
4 C+ W" i" |: C8 t            6 @4 F- [* J( B) N. w, K3 v) K
       }
' ?* \7 \  {9 ~, V: A/ K, \6 L3 |2 ]   }
& y4 ?' T) ]% ]/ T% w& I}% [) `/ h- Q' x' j
int main()! S6 P7 v3 J2 W/ T: J# p
{
% A5 Q9 ~9 V( C8 }: C# L    int n,i;
8 l5 \3 _0 E! p: R    % x$ Z2 f' M# ?) `  K5 u: g0 _  \  i
    while(scanf("%d",&n)==1), W% v) @/ t. L! Z! T8 b* ~; A; i
    {
  b+ h0 m" s( ?/ p* y       solve(n);9 @: g& V* E" P' l2 \
       printf("%I64d",a[digit-1]);, S& X3 @: q. m/ v( L) q% m4 F+ G4 g
       for(i=digit-2;i>=0;i--)
3 M0 M: x' R9 `9 P9 x; ^: Q       {! H/ _/ ]0 G) N
            if(a[i]<10) printf("000000000");//小于10位数补0.
" s3 q1 ~& w; J& @6 I           else if(a[i]<100) printf("00000000");
$ f# F1 o) X/ B9 }# t           else if(a[i]<1000) printf("0000000");$ D2 N) ]" `7 {" D6 O3 l3 k
           else if(a[i]<10000) printf("000000");
# W8 |, x& r4 Y: R2 l  }& d           else if(a[i]<100000) printf("00000");5 I7 a8 }7 f$ H8 {" _
           else if(a[i]<1000000) printf("0000");
! E% P7 o& B: p4 Z           else if(a[i]<10000000) printf("000");" T, W- F+ z/ h. N0 a4 n
           else if(a[i]<100000000) printf("00");5 v. ~9 X( S, i2 J. }3 Y- J
           else if(a[i]<1000000000) printf("0");
4 W. U+ a7 p  X6 N2 J* l) o9 t           printf("%I64d",a[i]);
- w: i- j) _! }$ ?0 j# j' o       }7 V; ^# l, j2 F" h2 ~5 s( A
       printf("\n");
& {9 x. H9 Y# Q  k9 ~# E    }
/ {" W' A& V- `( E: C    return 0;
: X$ v$ J- d( q7 o- X}
( o9 N& L* h9 |6 t' A3 H+ L1 E# g
作者: steve糖果    时间: 2010-10-2 07:29
#include<stdio.h> : c" j$ L2 C1 d/ ?* M# Z( E3 M

4 F2 ^1 I" d; y& N8 |6 \) T0 Nvoid main(). h$ j" w) L$ A5 G! I
{9 F9 C; y8 \3 A& F
float n;+ N% f- l0 p' n% N. [
int s;
! \8 U4 P2 w( K5 f- @  ~printf("input a number named n:");+ e5 f( d+ f! a! m3 c0 z) x7 p
scanf("%f",&n);" T8 e+ C8 h$ S2 J  V5 i6 H" W
s=fun(n);, F) t" i5 o$ b" x7 f
printf("the result is:\n%d!=%d",n,s);' k8 \9 m: O& k* s/ A- _
}5 }1 k$ }/ j; C+ |
  Z" L) y" u2 A: q: F) N! e# ~
void fun(n)
) p, s% @: Z4 e: q4 Y' ~0 P{
8 S3 X1 I' s& B8 g$ t; C  int i,f=0;
" ^" m; e1 q* A) r; J. m! |if(n<=0||!judge(n)) {return ERROR;
! ~1 ~% S) v. z9 M) w- t, c4 \ exit ;}
/ t) {; ~- |4 J$ [1 n9 e- U  while(n==1)% R5 `# J" [2 U, l
     f=1;& m2 q/ Y) Q, W  E% f8 v8 _
     f=n*fun(n-1);
" Y5 h7 K; \: {4 I, f6 \return f;2 B' V+ H" M4 r5 I
}
4 F5 d4 `) q$ O! M, H3 V9 Z# \7 L! O: N7 A+ ]. ~
void judge(n)//判断一个数是否为整数% G7 Y/ G4 E& u2 }2 A, C; g6 j* v
{+ h6 G* `) _) @
while(n>0)
" {' j1 ^1 d3 C( En=n-1;" K* E! I- n- B+ a' ^: j: w
if (n==0) return 1;& P& t  N- E0 p0 [- T! A
else return 0;, E- ?6 P& I1 R  Q- G* \& m/ L6 Y
}9 [9 |5 Y) m$ f4 {# j' ~! [
% @! I' O8 B# S7 c, W9 v2 s

作者: steve糖果    时间: 2010-10-2 07:30
上面的错误谁解: P) ?# |+ v# J8 J5 c
谢谢~~~
作者: steve糖果    时间: 2010-10-2 22:42
求正解啊~~~~~~~~~~
作者: 1084595218    时间: 2010-10-8 21:52
#include<stdio.h>
/ M( F0 z  I6 E5 E0 T" E#include<string.h>
7 I! _- R5 p+ Rconst  int maxn = 3000;7 S5 o4 s7 o. G. X8 J8 N
int f[maxn];  c2 I9 S! q- l2 m: M
int main() {
( H5 T# ^1 F( ^! w2 M" W5 G7 X int i , j , n;
. b/ W7 a2 z4 r3 i, S' A9 h" e; b% }' |2 _ scanf("%d",&n);
. e; @9 D" A1 Y memset(f , 0 ,sizeof(f));
) L, b/ x  `3 k0 C, P/ \ f[0]=1;* }  E4 \. ]4 |7 e* C% ~) Q
for(i=2 ; i<=n ; i++)
3 T! X( E, w' i  n  T7 l/ T" t/ v { , P: n) A) o) W4 L3 P
  int c=0;
+ A5 i" |! i  Y* h  for( j=0 ; j<maxn ; j++)
" h5 c9 l' l3 t" S) o! r  {
  x% M/ @' ^+ H* s7 V; h   int s=f[j]*i+c;
6 H  U+ H% O. f0 Y0 w: q3 J  Z   f[j]=s%10;" \9 }* {) x2 \. b6 G7 V  Q/ k
   c=s/10;6 P1 C  y, c. Q! h2 Q
   }! U! ^( m" d0 @  b0 M+ z  C* A2 V
        }1 k; x5 I/ y7 y, v7 }
        for(j =maxn-1 ; j>=0 ; j--) if(f[j]) break;6 B7 c5 m, G( \" O  y
        for(i = j ; i>=0;i--) printf("%d",f[i]);( R% b) X2 O  X; }
        printf("\n");
7 H/ d0 E8 k! V9 ]' V& I        return 0;
6 |9 z5 x: L# d1 ?3 o! C        }
: q3 U7 B7 a# c( O! b3 B  
作者: 1084595218    时间: 2010-10-8 21:53
可以求999!
作者: 1084595218    时间: 2010-10-8 21:55
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
作者: 1084595218    时间: 2010-10-8 21:56
这是999!的结果
作者: 1084595218    时间: 2010-10-8 21:57
等了这么久还是没人能算出来
作者: 李子    时间: 2010-10-14 21:38
汗!!可以在开头再加一个判断语句,如果数是1000,就算999!,先输出999!的值,再输出3个0,如果数小于等于999,就按照上面的算
作者: gaoshanliu水    时间: 2011-1-18 18:08
不知道哇
作者: dugumen    时间: 2011-1-28 01:45

作者: 李——建辉    时间: 2012-1-13 12:53
没有体力啦,资料能发给我一份吗?我的邮箱是18633525948圈163邮箱,谢啦
作者: slsnlc    时间: 2012-9-1 16:01
steve糖果 发表于 2010-10-2 22:42
/ O+ Z2 w' _( X  ^求正解啊~~~~~~~~~~

2 W9 Y  d( I8 z  K#include<stdio.h> * v; H+ J! Z: K6 h
int f(int n) $ p7 {$ A( X2 C* H: e' I# ^
{& |" r& n0 I/ H4 c) @
    if (n==0) return 1;
0 c: X& h4 G6 k, _    return n*f(n-1);
5 F: ~. W5 R- `$ z% b4 [}
! w0 X1 @" z/ w0 J" nint main() 4 Q7 G+ C7 v3 R$ A
{$ Y$ `$ D5 P! l% g2 \" Y. \0 H# q
        int n;
% J! ]7 o: G/ E$ B) k' G        scanf("%d",&n);
" |" ?2 A% N6 Q        if(n==0)printf("0\n");
  |. D0 K* Z" f6 I- I        else if(n<0)printf("ERROR\n");
& ?, r* C3 t& H5 t. |( G+ B. s1 p$ C    else printf("%d\n",f(n));4 ^: @& s( {, K& c% C8 ?
}
作者: slsnlc    时间: 2012-9-1 16:06
1084595218 发表于 2010-10-8 21:57 # g+ `* d2 w* e
等了这么久还是没人能算出来

; q! K# w$ G7 R7 A  m' J! Q#include <stdio.h>* W- G! v  Q. q3 _& E
int main()- L# b) t) S& _3 N$ O, w1 t8 Z5 T- m
{6 s  s/ r2 G# E4 `) k) ]) p
    long a[10000]={0};" Y! S2 H9 j  L) Z8 Y% o3 ~
    a[0]=1;
: Q6 a) ~  W0 y$ p6 V  u1 |$ s' L8 k    int i,j;
. }* S+ K' b7 V/ X6 P6 s) h    int num;$ ?( ?# t, D# f; ^  R8 ]! f
    scanf("%d",&num);4 M% m& d! f& v8 E% ^. A0 ], b
    for(i=1;i<=num;i++)
: a6 W/ k1 h0 [, O$ p# P    {4 W) I3 @. X: g9 y/ m- H
        a[0]=a[0]*i;
' S/ v5 Y( t  R( O! E% }        for(j=1;j<10000;j++)4 J, r4 Y. k- `; W! q8 u
        {: Q" L" x5 W/ G. b# O1 Z
            a[j]=a[j]*i+a[j-1]/1000;
/ i2 A( k8 m6 F( m9 P; Z; r5 C3 a            a[j-1]%=1000;4 w+ k0 f+ e8 a! W$ x; i5 j
        }1 l5 v7 I) e1 N& e0 j
    }( l) c0 _7 q6 q, C+ u
    for(i=9999;i>=0;i--)
( U/ S4 |! g: x7 F/ Q* j        if (a!=0)
/ [% x6 l7 J/ s: ^- x1 {: P! T* D        {$ t7 O# k7 B  [8 Y
            printf("%d",a);
# A  ]/ I% m) @7 L- x3 {/ @/ K            for(j=i-1;j>=0;j--)% F. ~7 I3 X( m  M' a; z$ w
                printf("%03d",a[j]);) w" P, I: p. A7 S3 r+ p, g
            break;
0 E( h& b$ \* f- G; s  Y: g" |+ d        }
' w( ~  {1 J, [' g) {: I    printf("\n");
  V& G; R/ ], H0 \- v( o7 ]    return 0;
6 p: y) `/ D4 p; @}
作者: 柯西不是你    时间: 2012-9-3 12:51
#include <stdio.h>
, O2 q" S- k: l% O* n#include<string.h>4 D+ x9 P  y9 X  p2 s3 @" K
#define max 50000
0 s3 R, m9 [& I. yint a[max];
* H' Y. Q9 O* _1 vint main()
- s7 |+ l. o4 L- W{
+ r0 q4 M& k% ]2 I9 A        int n;+ Z. h( F. G3 \0 n2 O+ F
        int i,j;8 o/ m: g9 @5 W+ w' r
        int s,c;
( ?( }  x" }2 Y! [' A+ }        while(scanf("%d",&n)!=EOF)+ o* k4 E7 B9 w' x5 Z! }+ \" P6 }9 b
        {5 |5 b7 h) C! Q, H: z
            s=0;) s9 q0 X1 ]: w, V$ E0 n
            memset(a,0,sizeof(a));! |2 T( J: i3 R. Y* |! n; e/ W
            a[0]=1;
: b8 t, u/ B2 c. X            for(i=1;i<=n;i++)
) A- [: u# k7 J2 v           {6 l6 z0 J! \9 p
               c=0;7 ]3 e+ w- {4 `, d2 `8 k, R
               for(j=0;j<max;j++)- V; H6 T  s! w& I5 w; [' U: M
                {
1 S* s$ c3 Z( g                    s=a[j]*i+c;: z1 n* a2 l# z' g; i( Z
                    a[j]=s%10;  z' H  J2 X2 p
                    c=s/10;
. D) E  n7 e; c% R0 u4 Q2 Y                }
( |! p# R' d0 l           }
3 V1 L( G# c- F% n3 ~& C        for(j=max-1;j>=0;j--)  g5 p7 q5 b/ D3 U! r1 `! n/ L
        if(a[j]!=0)break;$ D( f5 r' I* R3 `
        for(i=j;i>=0;i--)
8 C( a8 G& M- m7 }        printf("%d",a[i]);; a  w/ U, s, N0 Q5 }
        printf("\n");2 p# d) k& P' _# i& O
    }
' t' o* t! A% j: \# F        return 0;
6 |( x7 a# C" @  Q$ [+ Q4 H0 N# t- k}
作者: 萤火之墓    时间: 2012-9-4 10:22
数太大了吧?
作者: 007\\    时间: 2012-10-8 21:16
阶乘? 用递归不就可以了么




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5