diejia
新生入学

注册用户
UID 171206
精华
0
积分 0( 积分有什么用?)
帖子 15
阅读权限 10
注册 2006-10-27
状态 离线
|
|
|
我用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)
zIUre$B
JHoy {
JDR{0we4Z\ plus[0]=1;
6wkG[Vbqt ALinux伊甸园论坛 .@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.comJ/QrCB
{ &W'V5X8r
|jA s(P0li
count = plus *num;
+_;e.D5br[4H-ma%QLinux伊甸园论坛 if(count>999)
Ze|LF B
{:W {5E:p:O6X!rG+d
plus = count%1000;www.linuxeden.com}F|Y"M m1B'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];
%VEqr)b#u
R E if(ph<=999)/ARD
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 VcuY$[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
Say3lY0u
}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}~.j J~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伊甸园论坛
n3lFEj8jQ5TS }|
jD'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]/P T$t4A?(R
cout<<"0";X_OlbO!_3p3B
cout<<plus[t];
mkj*Z,R/`www.linuxeden.com }
x9|%q4}+mgEl }Linux伊甸园论坛
c
v2KL4GlL 0Z
else if((plus[t]<= 9)&&(plus[t] >= 1)) i0Dmp2y!^ kX8}
{
A k(B&pc d3hc if(t==num)
6X$|d*Zw e,Y%l"C {(L8c`d,?P
cout<<plus[t];w;yvZY!lzr2W5`
}(D3e9d8Zo(l
else
&]f*M/z2h0I@ iLinux伊甸园论坛 { @],pVr"cymg
cout<<"00";'ED4m,@ @4@3k
cout<<plus[t];
kq0sO0\6~a~#A } www.linuxeden.com5Url2a9f)I*U)p&RN
}
?shG|_K{*a G7ELinux伊甸园论坛 }www.linuxeden.comI.](O0B'YLZ
gA
E
cout<<endl;!fa/STO l%VOC
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位数,这样就解决了数据类型无法保存结果的问题。
|
|
| |
|