大数演算思想----大数階乗

2326 ワード

haha
ええと、今日は大数階乗の求法コードを勉強しました.
#include
using namespace std;
int main()
{
    int c[20001];
    int di=1;//      ;
    c[0]=1;
    int num=0;//     0;
    int n=1000;// n!, 1000! 
     for(int i=2;i<=n;i++)// 1  n
     {
        num=0;
        for (int j=0;j//    i 
        {
            num=c[j]*i+num;      
            c[j]=num%10;        //    
            num=num/10;         //    。 
        }
        while(num)//     
        {
            c[di]=num%10;
            num=num/10;
            di++;
        }
     } 
    for(int i=di-1;i>=0;i--)//      c 
    {
        cout<return 0;
}

具体的な操作は言わないで、ここでは思想だけを話します.私は勉強した後、その中で大数の処理に対してこのような策略を取ったことに気づいた.
  • 分離数ビット:大きな数の各ビットを分離し、1つの配列に格納します.
  • シミュレーション演算:シミュレーション数の運転時のキャリーなどの操作.
  • 逆シーケンス出力.これらの考えによれば,他の大数演算をシミュレートできることを意味する.大数加算、減算、乗算、除算など.