寄信人: Fll (沧海一声笑)
标 题: 高精度阶乘、乘方排列组合
发信站: 郁金香BBS站 (2004年10月01日23:22:30 星期五)
来 源: 10.13.6.24
#include<iostream.h>
#define max 60000
int main()
{
int i,j,x,b,f,n,t,m;
int a[max],d=1,e=1;
char z;
e=1;
while(e){
cout<<"输入计算方式:! ^ c p:";
cin>>z;
if(z!='!'&&z!='p'&&z!='^'&&z!='c')e=0;
if(!e) break;
for(i=0;i<max;i++)
a[i]=0;
a[0]=1;
cout<<"输入一个整数:";
cin>>n;
if(n<0) break;
if(z!='!'){
cout<<"输入另一个整数:";
cin>>m;
}
if(n==0) n=1;
t=1;
if(z=='p'||z=='c'){
t=n-m+1;if(n<m) break;
}
for(i=t;i<=n;i++){
if(z=='^') b=m;
else b=i;
for(f=0,j=0;j<=d;j++){
x=a[j]*b+f;
f=x/10;a[j]=x%10;//cout<<a[j];
}
while(a[j]==0) j--;
d=j+5;
}
if(z=='c'){
for(i=m;i>=2;i--)
for(f=0,j=d;j>=0;j--){
x=f*10+a[j];
a[j]=x/i;f=x%i;
}
j=d;
while(a[j]==0) j--;
d=j+1;
}
while(a[j]==0) j--;
cout<<j<<endl;
for(d=10,f=j+1;j>=0;j--){
cout<<a[j];
if(d++%35==0) cout<<endl;
}
cout<<endl<<"结果为"<<f<<"位!"<<endl;
}
return 1;
}
--
爱我所爱