数学建模社区-数学中国

标题: 求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 ]  `9 ]; V% D  v9 p* iusing namespace std;' U3 x$ t' \' Q' Y  {; H
#define dd 1000000000
& U, a7 |5 f  k% y. D#define maxn 36000
  A6 i" s6 ^' L3 _  p3 j+ R2 G__int64 a[maxn];8 x# F8 ~3 E. b$ H4 U& h6 m- O
int digit; //位数.! G& L7 l1 g5 U$ S6 D( z
void solve(int n)
- i- |( `. L4 p6 L3 x{
. a3 l9 F# R# X, O, w   digit=1;
# \/ u  a. X4 o: V2 U+ D! D   int i,j;! ?8 x$ \6 E' S; C, H: s
   memset(a,0,sizeof(a));
) J, Q1 X% o6 E+ u* [: N   a[0]=1;
9 @9 L  m! _& o3 T   for(i=2;i<=n;i++)7 N* b( x; e% {; @# x& I6 N' I. c
   {6 N  {# r$ @. ^8 x' l
       for(j=0;j<digit;j++)
8 S' `2 n& O1 p$ O       {
9 V5 R$ B+ k/ t. B( p# ]           a[j]*=i;) h% R/ C& N+ u. h0 P
       }% q8 I! s) l& X! d8 X
       for(j=0;j<digit;j++)$ X: R5 ?4 M: J% w: P: t* D8 o: p
       {
6 x3 W9 j+ I+ b4 X) q           if(a[j]>=dd)
- z. }6 B# W8 P8 t% E  y8 d           {
  @0 c8 c6 N* B6 ]6 d% p               if(j==digit-1) digit++;+ z2 m" P. E0 v6 W
               a[j+1]+=a[j]/dd;6 `$ ~; _  m) _1 x2 I; u1 O
               a[j]=a[j]%dd;0 @0 C0 Z  N3 w+ F( j
           }& W6 J  O8 }# l* \  A, [  n( m
            
! A$ L# ^+ D. Y$ w3 k       }, }5 s7 U& r/ X" C" R
   }
$ h5 E; f0 L4 D! S+ {" Q}
5 `, k7 x8 l7 @" O# `2 m3 G' E# Eint main()
3 q% _. M- W6 [{
! l# m  O/ J, @: f2 z0 X8 e    int n,i;
4 i+ j# k3 E9 j" A/ o" M5 |* S    # ^) h6 F  d8 i. X0 b$ q5 p) M' @- @
    while(scanf("%d",&n)==1)
# f- s5 ~; k) k: s    {
$ i$ g+ q# q; ?0 a- F) J       solve(n);
) \% M9 ?- o9 h. x6 U5 k$ i       printf("%I64d",a[digit-1]);$ @* V$ q' Y  f* Z
       for(i=digit-2;i>=0;i--)
9 N+ o9 y$ m0 t9 d       {
3 l$ A: ~' q9 a. E' w8 [0 n            if(a[i]<10) printf("000000000");//小于10位数补0.
% K/ T9 J7 E$ M' e) {3 [           else if(a[i]<100) printf("00000000");3 Q( p3 z* b+ [+ F3 d0 @8 n) |
           else if(a[i]<1000) printf("0000000");# F, m/ j5 a4 P+ X
           else if(a[i]<10000) printf("000000");' z) J6 i5 ?( X8 j8 n: n
           else if(a[i]<100000) printf("00000");
! k0 x8 G9 C, q' n9 d           else if(a[i]<1000000) printf("0000");
, j, F! @8 t* a  s1 ]8 x           else if(a[i]<10000000) printf("000");
' V) ]7 e, U- [" S  r8 E/ X, O           else if(a[i]<100000000) printf("00");7 }6 A1 ?! B5 K. F5 F0 F
           else if(a[i]<1000000000) printf("0");
: b. }( @' B! H% v           printf("%I64d",a[i]);" Q0 B% c' d) r. L
       }+ q; D4 ?3 z  e5 m7 p6 M: a+ r
       printf("\n");0 t. M% K* q6 j6 }$ r" s: Y/ {
    }; \/ [5 A; H7 j# @6 Y/ n
    return 0;
2 f  r6 K6 s4 ~% E  c6 t% R}4 s8 L2 \2 G, `

作者: steve糖果    时间: 2010-10-2 07:29
#include<stdio.h> ; v( n# ~! Q# [
9 \, g+ N  F  F" s, G7 W
void main()
& R( O$ a9 ~) [7 X4 H{
# i0 v& E7 `' h, r* }' ~6 T' g& Y, ifloat n;* V/ z( l: l! z1 f: m. n5 N3 Q
int s;* V- U* H. B  e3 F' F% U
printf("input a number named n:");
! [, H; i: W& J8 W+ f' q. a* n+ lscanf("%f",&n);
; }0 y- W  I! Rs=fun(n);
2 a! }: `: n+ c+ ~printf("the result is:\n%d!=%d",n,s);
: ^: ~+ v* B+ `; N) ?: I! l7 Z}
. b/ a$ L1 g" h  @; n. A' _, m7 d! O% m; F% x0 y4 P
void fun(n)$ w, u5 m$ }% R  I/ v
{
8 W" @! |2 S- v, ]( k( K  int i,f=0;+ A; `5 ~! M% o! c
if(n<=0||!judge(n)) {return ERROR;
' ?3 o9 a# ^, P- O" p exit ;}
- O0 U% O/ v5 W6 {  while(n==1)3 X- x" m% [7 Y
     f=1;( H) e3 a+ g  u- j3 A% s
     f=n*fun(n-1);
- k1 x% }* _' k/ o# B7 h3 ireturn f;& ?# _& k# V8 |
}& N- V  e# A3 g! j) Y
- ^3 U5 R9 j2 L) R. b' \
void judge(n)//判断一个数是否为整数
3 x* v% w; K" Z# ~7 [* g1 {; t9 D; _{* x) h8 r1 m  Q: G% u' Z8 }& s
while(n>0)* m9 B$ z# {7 g0 G( d
n=n-1;
" x9 l; Y" D! `4 Mif (n==0) return 1;" }+ r! Y8 q- A$ h+ v& m
else return 0;
3 J2 N+ u+ _) J6 M; P* _6 `  T}
4 I& }$ r2 x1 e3 _) K3 b% K, _& F* E8 k" Q' a( ]% Z

作者: steve糖果    时间: 2010-10-2 07:30
上面的错误谁解6 [/ g2 F! b+ c% \
谢谢~~~
作者: steve糖果    时间: 2010-10-2 22:42
求正解啊~~~~~~~~~~
作者: 1084595218    时间: 2010-10-8 21:52
#include<stdio.h>% B6 s9 H2 t' f& @* Z" e% C& w
#include<string.h># B; k# \' Y( S, @% ]2 E, z& U+ t' K
const  int maxn = 3000;4 s  L% A, U3 f: {7 w: Y8 i" [
int f[maxn];
0 O+ w; j* o# c9 G9 [% }int main() {; ]- H2 k* Y! h2 b8 }+ ~
int i , j , n;
$ j2 O. X: |: M3 A% X scanf("%d",&n);
: k+ E! `& x! c, }0 E memset(f , 0 ,sizeof(f));9 V( U" B: Q+ `9 B
f[0]=1;
; J  C7 S" ]0 S' @$ E for(i=2 ; i<=n ; i++)
' H4 f* f: {# |8 G/ t0 o: v {
" P. R# ~7 x; i+ Z. N  int c=0;2 {+ o3 }: V5 T' K" @/ v- t- P) v
  for( j=0 ; j<maxn ; j++) 0 x1 ?4 A, n- G3 ~
  {2 m( a5 C4 d, E3 R. S
   int s=f[j]*i+c;2 M: v" ]5 C8 q' r- h
   f[j]=s%10;9 W+ |4 g9 C0 f& {5 W5 [
   c=s/10;
" {' e( s0 ?) i1 X   }0 F) h5 y* A! I0 E# b
        }
- F4 m! n' @/ m1 J- f4 m        for(j =maxn-1 ; j>=0 ; j--) if(f[j]) break;1 @( u6 n, t, v( q5 G9 }$ v
        for(i = j ; i>=0;i--) printf("%d",f[i]);4 k& }3 l) }+ @
        printf("\n");5 V. {7 `' ?- e# b% o! ?
        return 0;: @1 v) Y$ H/ E6 |4 d/ @9 @1 W
        }
; L# ]( e7 h( `/ @  
作者: 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
3 B4 R( {- i. N0 z求正解啊~~~~~~~~~~
8 Q& A0 S3 d# T6 K1 \( W* z: d
#include<stdio.h>
7 G' t+ W0 B* N9 x' qint f(int n)
& m0 x' m; G3 D7 N{+ T( w2 i$ X. e
    if (n==0) return 1;
8 i) P  x& y$ e  Z    return n*f(n-1);
: F. W# Y7 a. E7 d  U( }}
, q* [1 U7 _/ q2 z6 Aint main() 9 A9 e2 a1 \) U! h7 k7 K. w6 e
{
3 [" x  J% S+ u9 q7 A        int n;) u! v1 l3 I, [
        scanf("%d",&n);) [, m2 U* C7 t! X( t7 v& E
        if(n==0)printf("0\n");
% v9 z  B+ M6 _        else if(n<0)printf("ERROR\n");
! _7 l' z0 U' T    else printf("%d\n",f(n));; y( Y. o7 m5 e6 k8 b% D
}
作者: slsnlc    时间: 2012-9-1 16:06
1084595218 发表于 2010-10-8 21:57 1 K) C. K) ]+ X, C% Q3 V
等了这么久还是没人能算出来

% I  i& _& Y5 ~; L6 ]8 N" \& r. R; S: D#include <stdio.h>
( F3 e: A# ^( G6 w6 Wint main()
' K, E0 v2 P. l{2 e; c5 _- ^1 L8 e$ N* m* f( K; ]& u
    long a[10000]={0};
3 s: C  n2 Q' ~    a[0]=1;
+ J5 `3 k0 G; T5 e% @% s    int i,j;9 }" C- V: Z* b9 l6 M
    int num;: r: p$ [9 M2 X7 a3 M- b
    scanf("%d",&num);/ l+ f6 A. R0 O: Q  A% ]5 T5 V1 a
    for(i=1;i<=num;i++)
" F8 i, L1 a2 |" e3 P' F$ {/ @3 F! f4 W    {! H% g  b0 f* P: L: N
        a[0]=a[0]*i;# j$ w& Q* z2 @
        for(j=1;j<10000;j++)
/ U$ h+ v( b( I; ^. V2 E1 D$ w        {
  \2 f( z/ g/ m8 k7 a- ?            a[j]=a[j]*i+a[j-1]/1000;, s1 ^2 P( V! J) B4 _) ~  H% E
            a[j-1]%=1000;
0 T' O; Y; [. |3 P        }
9 j! I* ?5 X- [, |  @6 j4 ?% s% q    }
6 _' h" x8 k) p% q' ~; d- j: l    for(i=9999;i>=0;i--)
& i1 b# k! z# x5 K; F6 {. A        if (a!=0)
* ?) e. W& S- _! t        {4 I8 b$ [0 _2 i* g
            printf("%d",a);
1 n7 `+ F0 h( F            for(j=i-1;j>=0;j--)
2 ?* l- a& F7 J* U6 f                printf("%03d",a[j]);
' R# B# T9 J- p8 ?3 h7 Z/ L            break;" U6 d& c) v) J/ d) O
        }: j$ O8 u) z  A) m/ y  |3 r- n; i
    printf("\n");, M" Z: m7 n  ~8 {, h
    return 0;
- q! ]3 [0 ~: S* V( m6 {}
作者: 柯西不是你    时间: 2012-9-3 12:51
#include <stdio.h>' F: Q0 q) f& k
#include<string.h>* S. g$ b2 g" l
#define max 50000
- w9 C) N: r4 |, n0 U- A# @/ }int a[max];
+ ?& h; `) z9 @, o' Uint main()
+ Z$ d! ^+ D  y{+ s5 T4 A$ g/ N7 ?/ c% X
        int n;6 N6 g1 L: h. \2 ^. w* _, z% G5 Z
        int i,j;
4 U7 V& w1 s( Q1 K+ M6 A        int s,c;
4 Q( ^) {' k4 Z; o$ q, J        while(scanf("%d",&n)!=EOF)% Z- v8 O3 A1 s9 p6 O
        {; {) L, |: ~' T0 k; \+ d
            s=0;5 B* \* N5 j4 l" }% l
            memset(a,0,sizeof(a));: V# i6 A3 _  M
            a[0]=1;
8 B6 p5 \2 ~  q$ d& E            for(i=1;i<=n;i++)
* {3 j: U( G' k/ m           {6 a( w" N0 L: t4 K
               c=0;2 J8 t9 m% W6 `: c; t0 u
               for(j=0;j<max;j++)
0 M; G8 x0 d& E4 {                {1 T) Y, R, r: R% W, }  X: Q
                    s=a[j]*i+c;$ [/ J0 c  k' h1 t+ H
                    a[j]=s%10;7 P% f5 X9 o- v
                    c=s/10;
& J0 l% S; J; n( ]7 q% `                }
' [& ^: Q* X- n/ p, S           }+ y9 B3 w- {5 N
        for(j=max-1;j>=0;j--)
! n, z& n+ Z- q& ~' T        if(a[j]!=0)break;6 N) S4 d/ h% Z6 r% Q
        for(i=j;i>=0;i--)
% g* c8 c6 M- h" [1 T; ~2 D/ y! S        printf("%d",a[i]);
9 R3 U+ L' j' N2 U! A6 g. Z, o        printf("\n");
& F4 N: [) _; i# e2 T" K7 a% c    }/ M% ?, \! a& |5 N, S+ X' j6 q
        return 0;$ }! d; T1 N( m7 G
}
作者: 萤火之墓    时间: 2012-9-4 10:22
数太大了吧?
作者: 007\\    时间: 2012-10-8 21:16
阶乘? 用递归不就可以了么




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