标题: 我用C++写的一个阶乘,支持任意大的数
diejia
新生入学
Rank: 1
注册用户



UID 171206
精华 0
积分 0(积分有什么用?)
帖子 15
阅读权限 10
注册 2006-10-27
状态 离线
发表于 2007-4-6 08:36  资料  个人空间  短消息  加为好友 
我用C++写的一个阶乘,支持任意大的数

#include <iostream>
l.? o2k;?Linux伊甸园论坛using namespace std;Linux伊甸园论坛O
z3_*ft$j.TR.a}

#define MAX 25
8U+pM#O/RN:Evoid Numplus(int plus[],int num)
)q1I-N+Q8ZX{
w\8i-l7N8a(wLinux伊甸园论坛   int count,sum[MAX],ph;
_)y'f?e1W/u       for(int j=0;j<MAX;j++)
)pl*qvq`"MW        { V\@^8on
                 sum[j] = 0;O^5khS2q.b'`
          }Cnk6oz
        if (num == 1)
zIU re$B
JHo y
            {
JDR{0we4Z\             plus[0]=1;
6wkG[Vb qtALinux伊甸园论坛               .@D
K
lQh%TWw

             }
        P'U+k8~FZ:u         else
+U'h%b
YFl
           { d6D*Bi"})S
             for(int i=0;i<MAX;i++)www.linuxeden.com J/QrCB
                  {&W'V5X8r
|jAs(P0li

                    count = plus*num;
+_;e.D5b r[4H-ma%QLinux伊甸园论坛                       if(count>999)
Z e|LFB
{:W
                         {5E:p:O6X!rG+d
                             plus  = count%1000;www.linuxeden.com}F|Y"Mm1B'q4w!B
                             sum[i+1] =  count/1000;
+k&\P7e&H~1p        N? {Linux伊甸园论坛                           }
x3MT1F8`3d'_n1nwww.linuxeden.com                        elsewww.linuxeden.com `'FSBl$b`]
                         {5M/NP*{
g;H

                               plus = count;  
6J9?E6X#X6AN@                           }
_ ]:S        lL
I0Y
                       }
9Wb;Q.}-S3e        a+N9SLinux伊甸园论坛               for(int m=0;m<MAX;m++);r-H0Vgl"]}
                {.n
kRR:[;|(S

                     ph=plus[m]+sum[m];   
%VE qr)b#u
R        E
                     if(ph<=999)/AR D
nh/g

                     {
}%cn?
M{
                         plus[m]=ph;
%b*g{r3u}^(AyLinux伊甸园论坛                      }
&KZO(Yu7RLinux伊甸园论坛                     else if(ph>999)
C/z!F:k*h#?7B                      {&n;S?&Z5@
                         plus[m] = ph%1000;o
u        Vc uY$[1Q4]

                         sum[m+1]=sum[m+1]+(ph/1000);     Linux伊甸园论坛X6K7H,nV'c+N
`

                        }Linux伊甸园论坛&a|^HNK
                 } fYt ~7f0hC.|xZ
www.linuxeden.com\;R;e.y f7@ v
               }5L
Say3l Y0u

}www.linuxeden.comO~6Sc1T|~G)k
int main (int argc, void* argv[])L
n$G1dS2Y,`,c)Z

{mF4L"K.n
    int n,num;
$dnA?&L!O?www.linuxeden.com    int static plus[MAX];
\#Txj8f,~    cout<<"input plus number:";Linux伊甸园论坛.A1@ |K3K u.P
    cin>>n;Linux伊甸园论坛L }~.jJ~TJye
    for(int i=0;i<MAX;i++)Linux伊甸园论坛3kk@&{S`akE
       {
D;\
P
[z3jF*Kr|c
          plus = 0;
E6mI.n5[0L@5~7s6R

        }
Yz3AzR,TAo!@    for(num=1;num<(n+1);num++)
e#Lw%B({^?4aLinux伊甸园论坛        {
`~9Ijp1rh/@%i           Numplus(plus,num);//计算阶乘
PtcB]_$HcLinux伊甸园论坛      
n3lFEj8j Q5TS         }|
j D'VeJ

     //输出阶乘

o*KUS9Wtd~Linux伊甸园论坛
    for(int j=MAX-1;j--;j>=0)q        E6F&r%J
Vmx

        {'r;zEi'NCF(o
           if((plus[j] == 0)&&(plus[j-1] != 0)).h&b5mU&F.~M5F\![*f
                 {
0kcdaY\                  num=j-1;:Eo!L,m'i"E)L:SP'l
                 
q%f$lNQ#t(Cwww.linuxeden.com                  break;Linux伊甸园论坛(IC |
hZ"t\$NJ

                   }OOn$G,m Q}
            else continue;"k^*O#P iec1L
         }
q+Mdr        ou_      cout<<"The plus of "<<n<<" is:";1r1|
T6P/N-O#uX6S        m/Iz)q

       u2@4CXS
      for(int t=num;t>=0;t--)Linux伊甸园论坛LI*h)k"m&]
          {
)G4@Xa8vw/f%]1U!Iwww.linuxeden.com                if(plus[t] == 0)
#qB tD_@~                      {[ F%]-EtL?op/I
                        cout<<"000";Linux伊甸园论坛2y]WT?Y"^
                       }|Bk6Ge/P
                 else if((plus[t] <= 999)&&(plus[t] > 99))
Fg4B/}VYL9Uwww.linuxeden.com                       {
#F&Z#u8x
vZ2uwww.linuxeden.com
                           cout<<plus[t];3Q6w
A/s3b

                        }
\#VSMy6\N                 else if((plus[t] <= 99)&&(plus[t] > 9))
LwVZU                        {www.linuxeden.come
\%M%Ak6@1nQ*mn

                            if(t==num)
&ze:W.?$_,{S4i'D4QLinux伊甸园论坛                                     {
)Q[&m%oME,f'?                                 cout<<plus[t];"^-v9Z9Z
Ys

                                      }
?k:~#b;ELinux伊甸园论坛                             else
g4}Wj#p(n"g                                       {+Q(g9]/PT$t4A?(R
                                     cout<<"0"; X_O lbO!_3p3B
                                     cout<<plus[t];
mkj*Z,R/`www.linuxeden.com                                        }   
x9|%q4}+mgEl                          }Linux伊甸园论坛
c
v2KL4GlL0Z

                  else if((plus[t]<= 9)&&(plus[t] >= 1)) i0Dmp2y!^        kX8}
                          {
A        k(B&pc d3h c                            if(t==num)
6X$|d*Zwe,Y%l"C                                     {(L8c` d,?P
                                 cout<<plus[t];w;yvZY!lzr2W5`
                                      }(D3e9d8Zo(l
                            else
&]f*M/z2h0I@ iLinux伊甸园论坛                                    {        @],pVr"cy mg
                                   cout<<"00";'ED4m,@ @4@3k
                                   cout<<plus[t];  
kq0sO0\6~a~#A                                    }  www.linuxeden.com5Ur l2a9f)I*U)p&RN
                           }
?shG|_K{*a        G7ELinux伊甸园论坛             }www.linuxeden.com I.](O0B'YLZ
gA
E

               cout<<endl;!fa/STOl%V OC
www.linuxeden.comHm/S%As}
}Iv5?Y
Z'm|_

Linux伊甸园论坛0H+ET&O9Q$wR8`T4{4M
编程思想:由于大数阶乘结果无法用float、int 等数据类型保存,所以在这里我用一个数组plus[MAX]保存,一个里面最大保存一个三位数字,但也可以保存2位数或一位数,那么plus[MAX]最多能保存MAX*3位数,这样就解决了数据类型无法保存结果的问题。

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-4-6 10:16  资料  个人空间  短消息  加为好友 
这么算阶乘没什么意义,我记得一般好像是用2的阶乘换算的





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
不容错过的IBM 集群技术资源汇总
diejia
新生入学
Rank: 1
注册用户



UID 171206
精华 0
积分 0(积分有什么用?)
帖子 15
阅读权限 10
注册 2006-10-27
状态 离线
发表于 2007-4-6 22:27  资料  个人空间  短消息  加为好友 
用2的阶乘换算怎么个换算,那怎么才能够保存最后的结果,特别是结果有60多位甚至上百位的时候,就像50的阶乘就至少有五、六十位,这样该怎么保存。

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-4-10 18:05  资料  个人空间  短消息  加为好友 
不错,相比较而言你也就是将保存的工作做好了。





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
alex32108
新生入学
Rank: 1
注册用户



UID 191338
精华 0
积分 0(积分有什么用?)
帖子 2
阅读权限 10
注册 2007-4-21
状态 离线
发表于 2007-4-21 22:03  资料  个人空间  短消息  加为好友 
我曾经用C做了一个,打了一屏幕的数字,才做到600多的阶乘,做任意的那不知道要打到什么时候!

顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-17 04:22

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.099232 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP