高精度阶乘、乘方排列组合

时间:2022-06-19 03:35:54

寄信人: 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;
}

--
爱我所爱