数学建模社区-数学中国

标题: 求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>% B/ k: {/ I: {5 c- L8 X/ F# R
using namespace std;1 r& x  O% ]& n3 C5 b# e- T
#define dd 1000000000   X# k: Z7 [) P
#define maxn 36000
6 k; z, `$ T$ \3 S8 B__int64 a[maxn];
" H1 ?/ u) w. bint digit; //位数.8 f, C  ]8 R  K$ o- P! j
void solve(int n)
* d5 S# m( M5 \, v{% W" d* c* J+ U3 D! e
   digit=1;1 D  U) S% ~$ v- ^( m& E
   int i,j;  R, N3 a; d8 a- \/ [+ Y
   memset(a,0,sizeof(a));7 ]/ E4 d3 c  A( g1 s/ V
   a[0]=1;$ N. Z8 ^5 g1 m" S( g/ c
   for(i=2;i<=n;i++). Y9 M$ k& ?( R* _) f* e( R5 R) O
   {
% l/ z* ?" {1 z1 L1 h4 R: M       for(j=0;j<digit;j++)2 u* J3 ~) i# R  g& K  H
       {
1 b1 _+ h. }! B           a[j]*=i;
7 `. ~5 t5 @# a/ G+ `' a       }( s# \& |  K, }% S2 {
       for(j=0;j<digit;j++)
+ @3 u  A9 r* L3 u3 a# X5 O+ Q       {
3 Y/ E. s" z( r1 }( a4 U0 u           if(a[j]>=dd)
% d& P$ l6 ^* {3 \: y8 P+ _) j0 \           {
7 a4 Z' I$ e% ]& f% N; g: I               if(j==digit-1) digit++;
/ G. L' e8 p# T! D               a[j+1]+=a[j]/dd;
7 F6 ~/ G! p" r) Q               a[j]=a[j]%dd;
: }4 g6 l7 R, U+ p+ R) N           }& H4 o& f6 P% C' g2 s9 [, L
            1 x# Z' Z8 P' C3 U
       }
( R/ ^# u& m# S6 ~. g# W9 g   }7 }& P$ W3 v" Z9 n
}* O6 U. D) D2 ^) i
int main()) w3 Z1 Q: X  C& Y8 L* L
{
& s0 Q9 O. V' z9 E5 j, P( Q% l    int n,i;  w) L/ c+ a  i
    9 M- i! `$ `# C- [" p
    while(scanf("%d",&n)==1)8 e4 I: ]6 Q* e8 @9 [6 K
    {& `& T4 ]1 F* W: m0 m
       solve(n);
, U$ q6 P' `* I1 V. g5 J       printf("%I64d",a[digit-1]);
5 I) t0 R6 n6 M( g, p$ N       for(i=digit-2;i>=0;i--)
% \0 R7 h! g; T7 b8 n. c       {
; }& g  q0 S$ X  R; j) {/ b: e            if(a[i]<10) printf("000000000");//小于10位数补0." i) D9 M' {% s/ f3 I  Z1 Q
           else if(a[i]<100) printf("00000000");2 \: P  M+ G$ \. v* ?; y
           else if(a[i]<1000) printf("0000000");
$ B& G0 T' p' l9 z           else if(a[i]<10000) printf("000000");4 a9 m7 u& B. t1 n' J' A+ H" p9 S. D
           else if(a[i]<100000) printf("00000");; P; `* {' O  x; ?( l
           else if(a[i]<1000000) printf("0000");
, B( }5 j- ~3 D) o           else if(a[i]<10000000) printf("000");- C# y% v) U  K& k2 E
           else if(a[i]<100000000) printf("00");
( c3 ]# K: k' [. A           else if(a[i]<1000000000) printf("0");
0 {2 Z4 V& T& R  x: a( p$ q: _/ i           printf("%I64d",a[i]);/ @  Y1 v& x) {4 F; ?% ^
       }
+ h) y/ D0 ~5 m* x       printf("\n");
3 u, Z. }2 Y$ ^" a; h+ N2 B/ x: S    }8 U' {0 H. J; Q1 M( T
    return 0;
7 d! p; _# W9 ^! c" e}
% B% F6 O0 O: C# X; G1 U  U2 C
作者: steve糖果    时间: 2010-10-2 07:29
#include<stdio.h> 8 b: r) S: I3 G& _2 f

0 f. P$ r3 B* d* j5 e# ?1 A% M4 E4 [void main()
& j  ]7 c5 M8 W( ]- g{# `/ s# ?8 e5 s% I/ _+ G  s8 J# v
float n;& [5 u" G% X, A4 ~4 _0 z
int s;
% B& y; V1 c* T; oprintf("input a number named n:");3 X. B8 p  p) w8 k+ ]/ Q
scanf("%f",&n);8 Q9 }* V, l( v" N2 ~. D) E
s=fun(n);
& R2 _  Z! f) K2 N8 w0 J6 W1 zprintf("the result is:\n%d!=%d",n,s);& W, }: Z/ ?7 g6 X7 @1 W
}
8 d! Y& A& l. j. x/ H- a
% l) S3 y# _* d# Y& Bvoid fun(n)1 R, ?- u% W" u3 O+ M% S1 {$ n
{# _( @& [0 w* O6 [8 g" I+ e
  int i,f=0;+ r9 G4 m" O3 H% V
if(n<=0||!judge(n)) {return ERROR;
7 r; w) k; L/ ?& p: {$ P exit ;}
) R9 b" q3 `. B  M4 y! i+ N5 d  while(n==1)7 q: K$ G* y; K
     f=1;
" W6 W0 J2 ]0 Q6 \0 `  o" f     f=n*fun(n-1);
$ ?3 I8 _) k7 B6 W% W- ^7 Lreturn f;: A; `& J# v# @7 |8 f# Q9 A
}
; o2 [7 `- ~5 G# w4 ^, |' J* i
* P( t3 |1 }$ }  b- w9 rvoid judge(n)//判断一个数是否为整数
: T/ I2 m/ {/ B* n# u{
) |( c! _2 W. R5 |# I0 S" Gwhile(n>0)
' M) b1 ^) B! T: [& dn=n-1;
+ k1 w8 `  @/ ^& H& s0 {if (n==0) return 1;; R2 t" \; H1 c' z
else return 0;& I; S. T3 L* x$ O
}' N/ Y* X+ Q( M- h1 H6 t

. k& T3 f" U1 j3 ]2 J& j
作者: steve糖果    时间: 2010-10-2 07:30
上面的错误谁解/ V  p1 T' c- g6 G$ s- F3 @
谢谢~~~
作者: steve糖果    时间: 2010-10-2 22:42
求正解啊~~~~~~~~~~
作者: 1084595218    时间: 2010-10-8 21:52
#include<stdio.h>
: r1 q1 [5 {" K8 f# ?6 u#include<string.h>
( O! I. s9 D; V) L* d7 b% {" vconst  int maxn = 3000;
! e5 V& W& d2 x  ]# Mint f[maxn];- L1 b  H0 B$ n" ^' f5 N0 q
int main() {3 r# I# n  M, |( _: m
int i , j , n;- n5 C) b* b4 g5 ^
scanf("%d",&n);
7 ]3 Z1 }( J. n. h memset(f , 0 ,sizeof(f));, I6 \' S! D( ~+ x! _
f[0]=1;+ ?& F$ z8 p2 v4 H2 r
for(i=2 ; i<=n ; i++)
$ I# |& {5 d7 Y; K) n { ( t" K  f  d. ]# \) n+ ]% x/ V( D
  int c=0;
+ K' s) K+ p: m4 }4 b; F2 e  for( j=0 ; j<maxn ; j++) 3 R' Z- p* e! S/ ^
  {
! z/ m9 O& f' B$ a8 O2 d+ ?   int s=f[j]*i+c;% C6 @  u) B8 |" ]/ s3 ^
   f[j]=s%10;
" P9 c- a! f9 B2 j& [   c=s/10;
; f3 a  Z* T1 z, T* ^4 g   }
& P. M5 o0 q! u  G' }+ O3 h- L) |        }2 d! b3 v! E( d3 W
        for(j =maxn-1 ; j>=0 ; j--) if(f[j]) break;' R/ D& t$ L/ M; d' z: Z  _
        for(i = j ; i>=0;i--) printf("%d",f[i]);
" c' b' I. {9 b* k        printf("\n");+ Z1 z9 l  {" P; \% j! {/ b$ Y
        return 0;
7 R: d0 |8 ], U. ~, u* j$ k( _' @        }% U$ L  L  K3 R( i
  
作者: 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
" a9 w7 }2 D  @7 ?求正解啊~~~~~~~~~~
5 J# X9 e( Z* \! H7 O1 ?
#include<stdio.h> ) c" p* V: V! S4 [
int f(int n) ( A$ F, d5 ?. m" x( D, x
{
* |' N1 z+ ]% G* ^/ `) X  n2 ^    if (n==0) return 1;
3 B& i- y- W) {5 ~- Y    return n*f(n-1);
1 X; x& [+ M. ?* T# i, L}
) G' [' v) g8 \( nint main() " c/ U+ r2 v- A8 i0 e5 ]
{! K( y; j* D, x2 M
        int n;
6 @9 y' U& h$ B% `        scanf("%d",&n);
3 s" v+ m' v3 ^6 A' g* n. y- E        if(n==0)printf("0\n");4 p( ~5 S9 p# ~4 p  \6 r
        else if(n<0)printf("ERROR\n");9 X# e# g8 h2 N7 k0 H, n
    else printf("%d\n",f(n));- b5 l8 h4 N  }: C
}
作者: slsnlc    时间: 2012-9-1 16:06
1084595218 发表于 2010-10-8 21:57 3 B+ N0 r" {) k( X# B9 w4 M9 l
等了这么久还是没人能算出来
! p3 g% K9 Z" s# j( m5 P( M& l6 [
#include <stdio.h>3 e; K0 Z$ w! I
int main()
& I3 N9 B+ A/ N2 O  T5 ]{# F( l0 k+ e0 b( _$ i* ^
    long a[10000]={0};
' l' |/ I$ \3 j    a[0]=1;: A8 c4 b( K/ N" @2 B
    int i,j;
8 K- d- U! P6 ^8 M    int num;
' A7 Q8 Y& r6 S# G/ J5 B    scanf("%d",&num);
' o; n2 b6 y. W. j4 N. X) X' L    for(i=1;i<=num;i++)
7 O$ z1 |6 r9 E1 ~    {4 ?( I# S1 V, t
        a[0]=a[0]*i;! N" m- X$ f! A+ C6 D
        for(j=1;j<10000;j++)
/ f. R' k' I# Z8 h        {
8 M5 n9 h7 W, R) P. ^            a[j]=a[j]*i+a[j-1]/1000;
' j) [# K# {& u+ L5 b2 u% `) H, Q9 h+ j            a[j-1]%=1000;
% P6 {( r6 D* M; D6 X        }) k4 G) W+ L* ?2 L/ R  d- ~) f" x
    }% ]/ O5 M/ v8 N8 [* C; B. A
    for(i=9999;i>=0;i--)
+ K" M* M1 {8 `3 ]5 }        if (a!=0)" e( U( @) [# s9 V3 k9 n# `+ t
        {
7 E6 V  X% ~7 d            printf("%d",a);/ I% G  J, G* w+ a/ h. u
            for(j=i-1;j>=0;j--)
9 U3 ?. Y' m- p: n% X! A& E! D                printf("%03d",a[j]);2 M) Y: F: G" R1 M4 r* E; R: y
            break;
1 f! _* l4 R" m) H1 a2 V        }% j/ @2 j3 d; O; p5 ?' n1 d5 \2 H
    printf("\n");' u1 l5 u7 i1 }
    return 0;  c. Y& [) l5 X
}
作者: 柯西不是你    时间: 2012-9-3 12:51
#include <stdio.h>! V( |8 X+ Z* t) L$ L! v" ~! e
#include<string.h>. R) P, d2 ^  @. Q( q. I
#define max 500004 _2 ]) l7 W* ~$ c" ?; [, `! r
int a[max];! T6 q) t- L4 ?
int main()
3 S9 i1 c( i0 G3 w{0 R/ y% o; d+ ]% d, c
        int n;6 V) |( C8 x! s( c. C* s
        int i,j;+ v* W1 w$ W' I1 J* H) V" \
        int s,c;
. \, o  Q7 a9 y/ k% p. S; F        while(scanf("%d",&n)!=EOF)
. g) ~5 l3 L6 r  x        {/ m% y; C: b+ j6 W" p7 i6 H
            s=0;
9 A4 B/ C2 X! B8 d6 {            memset(a,0,sizeof(a));
$ U& z3 Q7 ~! B, \            a[0]=1;
! m# ~, ^  B! w" k            for(i=1;i<=n;i++)
, O- u7 }0 y- i; |& U% f           {
3 m: f" `4 Y! D: m8 }: h               c=0;
$ E, v9 J2 t% c               for(j=0;j<max;j++)
0 y0 I5 @$ X% C/ S9 `+ S) J7 Q                {
" T# e- Z3 H: R2 V( ^2 W2 b( t3 s                    s=a[j]*i+c;% ~4 I; N) p/ [1 Q
                    a[j]=s%10;
* N/ F: H6 q9 }7 o8 b* k                    c=s/10;
, O) _6 R+ G7 V  G& Z" s( D' r                }; L$ b5 M+ k6 K. N9 A8 k7 }. V$ ]
           }
4 Q- R1 q' C8 C  `0 ]$ N0 V        for(j=max-1;j>=0;j--)
1 `) ?" Z7 @5 ~  ^) t# `* M: h        if(a[j]!=0)break;
% X! W4 v- `! D1 l        for(i=j;i>=0;i--)' A5 [# Y/ e) u: Z2 Z; r
        printf("%d",a[i]);0 n% Z# B# n) ^6 X, p
        printf("\n");0 g( @: u- ~- D! j
    }
; @3 |, K+ M% c9 Z1 ^3 U; B        return 0;
' L( l: t5 z* s9 t6 p, n) j* T}
作者: 萤火之墓    时间: 2012-9-4 10:22
数太大了吧?
作者: 007\\    时间: 2012-10-8 21:16
阶乘? 用递归不就可以了么




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