N的阶层(王道)

题目描述:

输入一个正整数N,输出N的阶乘。

输入:

正整数N(0<=N<=1000)

输出:

输入可能包括多组数据,对于每一组输入数据,输出N的阶乘

样例输入:

4

5

15

样例输出:

24

120

1307674368000

 

#include <iostream>
#include<string.h>
#include<cstdio>
using namespace std;

struct bigInteger{
    int digit[1000];
    int size;
    void init(){//初始化
        for(int i=0;i<1000;i++)
            digit[i] = 0;
        size = 0;
    }

    void set(int x){
        init();
        do{//每4位为一个单位分解依次存入digit中
            digit[size++] = x%10000;
            x /= 10000;
        }while(x!=0);
    }

    void output(){//输出
        for(int i=size-1;i>=0;i--){
            if(i!=size-1)
                printf("%04d",digit[i]);
            else
                printf("%d",digit[i]);
        }
        printf("\n");
    }

    bigInteger operator * (int x) const {//乘法运算符
        bigInteger ret;//将要返回的高精度整数
        ret.init();
        int carry = 0;
        for(int i=0;i<size;i++){
            int temp = x*digit[i]+carry;//x乘以当前位数字加上来自低位的进位
            carry = temp / 10000;//计算进位
            temp %= 10000;//去除进位部分
            ret.digit[ret.size++]=temp;//保存该位数字
        }
        if(carry!=0)//若最高位有进位
            ret.digit[ret.size++] = carry;//保存该进位
        return ret;
    }
}a;

int main()
{
    int n;
    scanf("%d",&n);
    a.init();
    a.set(1);//a的初始值位1
    for(int i=1;i<=n;i++)
        a = a*i;
    a.output();
    return 0;
}

 

posted @ 2018-03-16 12:24  Shaw_喆宇  阅读(350)  评论(0编辑  收藏  举报