数学建模社区-数学中国

标题: 求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>7 y$ S! _  x( E& X+ R
using namespace std;; g. M: ~) ^/ G* U  m: o* k' ~
#define dd 1000000000
0 y- w  G" \: d4 ~0 T: V' s! R#define maxn 36000
' W6 }0 p4 m1 ?: J1 h/ A__int64 a[maxn];
5 {* c. C+ ?1 W+ V  Y# Sint digit; //位数.% ]& q  P! |6 P: n5 _! j) Y- b
void solve(int n)8 e; M1 F) c+ p2 t) I6 \
{: p6 Y7 E; q5 |
   digit=1;! o- d1 p, M# [  \& t: A3 h
   int i,j;
9 L+ F# P% T% s  _   memset(a,0,sizeof(a));
. M: W- ]+ H( U( v6 Z$ u& Q. H   a[0]=1;! O9 ~* K1 G* ?
   for(i=2;i<=n;i++)& n& z3 A2 E; s2 {
   {& E2 D7 A* T/ ^7 s% J
       for(j=0;j<digit;j++)
' T6 m% o5 w' T7 ?       {
% g: `) E; f% [" l4 G           a[j]*=i;
3 ], j5 E6 Z) Z/ I- u3 ^3 u       }& W+ f: n& ]% F* x4 j/ Z$ |- o
       for(j=0;j<digit;j++)
  P; I! u( c  ^' I4 z- X6 N9 V       {% |0 g0 N& c2 q. O/ I; b5 _
           if(a[j]>=dd)
& W& z; {$ b8 n( I           {
* u3 e% U$ c& U4 C, q# L               if(j==digit-1) digit++;
" x, V1 _, g5 e8 Q* p               a[j+1]+=a[j]/dd;
* d' v+ d: b+ o: K  x+ a4 Q3 L               a[j]=a[j]%dd;
7 p$ K' d$ X& m           }+ D. n) z% c& q* |
            
. B4 E7 h) r$ o7 x; V. Q  G( N+ G& ?& Z       }$ X4 w  q& b3 z$ Y
   }
4 @% r5 K$ O1 [4 a( U! J5 p, h* U}  B$ `. C6 l7 F+ z/ f& i: l. I# _
int main()
+ I' I( ^0 p6 u+ @1 |% _1 ?{
, X, `7 a( `# M0 V' I3 c    int n,i;
6 c, C6 w+ A6 z7 E   
6 |& Z3 K  x1 l- J' Z3 H! r7 L    while(scanf("%d",&n)==1)
" {1 H; `: j! B- G: u/ t7 }- Y    {
, q8 y5 d: @( @; S5 q       solve(n);. C; _* |0 h* C
       printf("%I64d",a[digit-1]);$ U2 E6 o, o( e7 k  G4 l" L
       for(i=digit-2;i>=0;i--)
4 t# @, J8 J# V& M1 i       {8 [) x! W( }: n" q* q
            if(a[i]<10) printf("000000000");//小于10位数补0.  I% i! g9 P; n' e' l: d  m1 c
           else if(a[i]<100) printf("00000000");
/ h& v$ ^) H5 _" z' q! l  p           else if(a[i]<1000) printf("0000000");. c2 `9 q: y% ~4 N2 m4 X$ e
           else if(a[i]<10000) printf("000000");
! S( F+ y, Z& Z3 K: E, ~! M           else if(a[i]<100000) printf("00000");
% [8 w* P+ Y& `: E- K           else if(a[i]<1000000) printf("0000");
) K. ]5 d9 o) r& Z: Z8 b0 E           else if(a[i]<10000000) printf("000");& T  k& y) E8 T8 [
           else if(a[i]<100000000) printf("00");
$ R8 i% V3 h9 Q" O' D+ A           else if(a[i]<1000000000) printf("0");  v/ `; A- I5 k+ J  S
           printf("%I64d",a[i]);
9 u: e4 C; T2 t0 L+ l       }; s2 i) u2 f2 c9 |3 v6 N% i
       printf("\n");
3 A7 Z( V' |: {; }: M. g3 K    }, L3 i- X: w: n& s; ]' {
    return 0;# e& s/ W2 e$ y* @! e) K
}
) \* v/ S; j; C; e- ?& ]
作者: steve糖果    时间: 2010-10-2 07:29
#include<stdio.h> : \- e8 m; j; T! V
9 P' O' H* S. s9 E4 B* b
void main()& m* e* U: Q' e* I4 _
{
0 ~* C% {- _+ A6 T/ kfloat n;
( I* B$ t6 e: z! H& O5 aint s;
7 o; r/ {, P0 e; T( n8 zprintf("input a number named n:");
3 L6 ~9 e* m; ]- o$ S: B  O) d: |scanf("%f",&n);
+ ~) U8 F8 I/ ws=fun(n);3 A2 K2 {) e  A5 O  F, K$ Y
printf("the result is:\n%d!=%d",n,s);! ^0 [" Z' F# s6 n' a8 Q7 g
}
* Y- j$ W, N" l$ z6 x* U, e* i9 K, p! z
void fun(n)
' y% ?$ N: l& Z1 R& z' E/ C{
1 I# d& g; i  B9 B% d/ W  int i,f=0;7 J7 F. [4 H' y( B4 `7 ]
if(n<=0||!judge(n)) {return ERROR;' n7 b# O$ l/ R4 w8 I, p/ G) Q; ?
exit ;}+ S& ~5 b$ x( D5 b; f0 W
  while(n==1)
9 Z( t$ z2 u- u     f=1;. ^7 T, H! n. I
     f=n*fun(n-1);! e! `$ y: u# a- V4 G1 ?" [) g5 U
return f;9 R. ~4 B6 ]% W. W
}
: f  k1 |/ ~; c6 L+ @  j5 E: N" Q6 h$ ~4 ]' w
void judge(n)//判断一个数是否为整数$ ]( P0 s6 G/ T  u) m  U
{
" `+ y3 I+ W  C9 P; R" l/ Vwhile(n>0)
% q& K( M" p* s" q: d1 Un=n-1;/ u! q! b- L8 w/ R; Z" i/ v
if (n==0) return 1;! b# d' m( ?$ y8 M
else return 0;, r# `$ s: R' ~! S- ]! T3 P% i
}
, |* d2 W, M: x$ v$ n7 X& i3 A4 |& ]: t  P, C: t& L( \

作者: steve糖果    时间: 2010-10-2 07:30
上面的错误谁解
" V0 `0 n: G8 m谢谢~~~
作者: steve糖果    时间: 2010-10-2 22:42
求正解啊~~~~~~~~~~
作者: 1084595218    时间: 2010-10-8 21:52
#include<stdio.h>
' N: M  y6 U2 |8 R8 `6 w4 G3 v/ k1 S#include<string.h>
: j& R5 e; S1 r! m$ {& r- yconst  int maxn = 3000;! a1 {# ^+ J" V: q% b, t6 Z. }9 [( l
int f[maxn];
) X7 G/ }6 E3 C1 H/ _  J7 v) q3 Zint main() {
& ?6 ~9 x1 e1 D  P1 h int i , j , n;$ M1 n( {. b: a1 h: x4 n
scanf("%d",&n);
! c# {: ~: ?& h: v: j, d memset(f , 0 ,sizeof(f));
9 F, p* [! P& t) | f[0]=1;" L/ q5 x# ~. R+ Y$ {
for(i=2 ; i<=n ; i++)
  f. G9 K8 p% s {
3 E! T% V: @( u  int c=0;
  ?# j3 k! R) B4 C! Y# W+ ?  for( j=0 ; j<maxn ; j++)
, q& Q+ t1 F9 R& J3 _$ G* c  {+ y$ _  B. H: D1 |
   int s=f[j]*i+c;8 ]6 z" O, t) V8 L
   f[j]=s%10;
/ ]3 \4 C5 p6 w   c=s/10;
3 n( y# q  F/ D& i7 m( \   }0 S: J) e/ w1 {. N5 U( t
        }
' V3 t! I$ {% e7 l9 @" S        for(j =maxn-1 ; j>=0 ; j--) if(f[j]) break;
. j/ |( ?: x: D5 H" N        for(i = j ; i>=0;i--) printf("%d",f[i]);
. A3 S. P/ W5 e7 Y! N& _        printf("\n");
3 Z* p% e- E* B% ~! i# d5 h+ [        return 0;
, k- t& z2 D0 |: s4 J9 I, h        }
! M  v. ?6 M- _. X4 M  
作者: 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
' E% H' M6 a0 e求正解啊~~~~~~~~~~

+ J# Y8 r3 _* x# t3 L6 J! C#include<stdio.h>
; t+ Y& c; p( ]0 l9 zint f(int n) / o; K7 `: ]) J1 ?' p: a8 C8 g
{
( C+ ~3 h7 ~  b$ h# q    if (n==0) return 1;8 _/ ]+ @+ ~4 t2 R$ z0 u, ?
    return n*f(n-1);7 W0 }3 t& y4 _( ~! X8 @3 Z1 _
}- v! B+ a4 |; X. y# H
int main()
* F  o. o0 T; l7 H/ l( M% G9 q{
' K7 r6 a, K9 u" n        int n;  q. g0 N5 ?* b/ d8 w. C* a
        scanf("%d",&n);
1 H+ t1 v# G+ H7 Q& \        if(n==0)printf("0\n");' _0 S5 E  B, g
        else if(n<0)printf("ERROR\n");4 y( P8 s( s0 X. q- q2 I3 E/ P9 d7 H
    else printf("%d\n",f(n));
3 j. ], ~# N) t+ v. z}
作者: slsnlc    时间: 2012-9-1 16:06
1084595218 发表于 2010-10-8 21:57
! Y+ D- e, a$ `7 v. p1 k2 v) K等了这么久还是没人能算出来

" U; B; L" ]$ @2 r4 n9 ?& O#include <stdio.h>$ T% c0 V6 w3 D* @+ M
int main()$ Y/ Q7 S8 }* I/ I
{
/ K* h1 D1 S* @, @4 b    long a[10000]={0};
7 q! s; I2 |- J) {1 {; J4 V    a[0]=1;
  a1 T, u2 v4 U- k    int i,j;8 l2 e. v' J7 }1 n, I" X
    int num;
7 P  f- i6 V! {1 P  y    scanf("%d",&num);+ X# E/ K. I! B  I0 t0 Y7 f' ~
    for(i=1;i<=num;i++)& u3 y. N% Q' e
    {/ @7 E& h7 s2 o( I9 ~( K. R
        a[0]=a[0]*i;
2 ]+ U% G2 a8 V0 O# I6 }        for(j=1;j<10000;j++)4 L8 b4 ]0 _4 d) l) G' J
        {# J9 Y: r  h# f6 L; g
            a[j]=a[j]*i+a[j-1]/1000;
3 n( |5 k* W. _5 |            a[j-1]%=1000;5 R1 d) Q2 X7 F- w/ X
        }2 j' g9 w# ]% Y6 x' x$ V8 a
    }
8 b3 b2 I) s6 `' }2 e! q2 r    for(i=9999;i>=0;i--)
0 L" f! D2 \. j+ T: u        if (a!=0)& a0 R8 I6 c  o  R
        {+ q+ I. K' o. n5 |* d! J# q% }
            printf("%d",a);) Z5 k8 q/ x3 x
            for(j=i-1;j>=0;j--)2 h, f  H# c/ G7 t# x! A7 \
                printf("%03d",a[j]);
7 \' Y# x% A, K7 z7 U" Q            break;
' q) P& j2 j4 ?        }" n% O) s  u" _% s* C/ h: t0 o
    printf("\n");/ A# I2 o* r$ E$ @& O
    return 0;
+ t- B2 J! |: D! r}
作者: 柯西不是你    时间: 2012-9-3 12:51
#include <stdio.h># |+ \0 x  y) B
#include<string.h>
  s7 @; p  O) V#define max 50000! h4 F8 _- D  z0 C2 v2 E+ \
int a[max];/ T: n2 x1 P) T1 j/ @9 y$ f
int main()
: z4 P% H' P( s2 R6 L7 V3 b9 O: B4 g{
8 ^9 U; b6 T' w! V4 E2 H2 J! h        int n;1 u/ O! k6 `1 P' ~1 ^
        int i,j;
1 ~$ I' I3 b( Y7 v' p- h0 m        int s,c;* G' j. {  L7 _: I9 f( {
        while(scanf("%d",&n)!=EOF)* ]2 g& t# J% O* J. A1 S# I
        {
+ U$ `! c! R8 g7 i4 N& l( s8 @0 L  k            s=0;
0 Z+ V6 H8 J6 k- r  \5 m$ j; O            memset(a,0,sizeof(a));6 C% \6 g$ i  w
            a[0]=1;
4 L9 j/ {/ p6 h0 A9 r! f8 D4 s            for(i=1;i<=n;i++)
, ?4 p, f6 U# n' F' Z) y) f2 x* D           {
0 G. `& G1 v! N* T               c=0;" a% K# r7 B% i- V  @2 M( n' `
               for(j=0;j<max;j++): z: r7 c8 x* w7 r5 x7 i2 f8 ^
                {
: m  X9 p/ P0 l. ]  X                    s=a[j]*i+c;' Z; L; l' U. H! f4 _% Z1 X
                    a[j]=s%10;, y. i4 U5 m' @& T- o" w5 @' T+ I& e
                    c=s/10;
# |7 P1 I; s5 ^, v- G; {9 M" H7 u+ r                }
0 E, M* ~. v; P$ I. ~           }  K9 T7 v  ~4 z% h& d
        for(j=max-1;j>=0;j--)) o6 M( O) b6 A7 Z8 k0 j
        if(a[j]!=0)break;+ Y" U9 D8 J3 ?/ {7 S8 v
        for(i=j;i>=0;i--)1 |& y4 M* M. I3 t  x/ W
        printf("%d",a[i]);6 h/ }, D2 W1 g
        printf("\n");
/ A  s( a1 B% H% K3 Z, a6 h, o8 F    }
( V1 U5 q2 z' ]$ n        return 0;4 j. {. c% r) L# n" D0 M; h
}
作者: 萤火之墓    时间: 2012-9-4 10:22
数太大了吧?
作者: 007\\    时间: 2012-10-8 21:16
阶乘? 用递归不就可以了么




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