计蒜客 难题题库 217 阶乘

n的阶乘定义为n!=1*2*3*……*n  如3!=6     n!通常最后会有很多0,如5!=120  最后有一个0,现在统计n!去除末尾的0后,最后k位是多少

输入格式:    

第一行包括两个数n,k

输出格式:

如果n!不止k位,则输出最后k位,如果不足k位,则将剩下的全部输出

7!为5040,去除末尾的0为504,最后两位为04 100%满足1< =n< =20  1< =k< =9

样例1

输入:

7 2

输出:

04


#include<iostream>
using namespace std;

int main(){
    long long mod, res, n, k;
    cin >> n >> k;
    mod = 1;
    while(k--){
        mod *= 10;
    }
    const long long cut = 1000000000000000LL;
    res = 1;
    for(int i = 1; i <= n; ++i){
        res *= i;
        while(res % 10 == 0){
            res /= 10;
        }
        res %= cut;
    }
    if(res < mod){              // 如果n!不止k位,则输出最后k位,如果不足k位,则将剩下的全部输出
        cout << res << endl;
        return 0;
    }
    res %= mod;
    mod /= 10;
    while(mod){
        cout << res/mod;
        res %= mod;
        mod /= 10;
    }
    cout << endl;
}


你可能感兴趣的:(OJ,计蒜客)