您的位置:首页 > 其它

刷过一题之阶乘的K位数

2015-12-12 11:08 260 查看
n的阶乘定义为n!=1*2*3*……*n,如3!=6 ,特殊的0!=1. n!通常最后会有很多0,如5!=120,最后有一个0,现在统计n!去除末尾的0后(注意是尾部所有的0,也意味着从右往左看第一个非零数字右边所有的零都去掉),最后的k位是多少。

输入:

仅一行包括两个数n,k,两数之间用一个空格分隔。

输出:

如果n!去掉尾部的0后不止k位,则输出最后k位,如果不足k位,则高位补零,补足k位后输出。

输入示例:

7 2

输出示例:

04

样例说明:7!为5040,去除末尾的0后变为504,最后两位为04,故输出为04。

数据范围:100%满足1<=n<=1400000,1<=k<=10

水题,不解释

#include<iostream>
#define ll long long
using namespace std;
ll n,k,ans=1,mod=1,len;
int intlen(ll x)
{
while(x) {x/=10;len++;}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=k;i++) mod*=10;
if(k==1) mod=10;
for(int i=2;i<=n;i++)
{
ans*=i;
while(ans%10==0) ans/=10;
ans%=mod*10;
}
ans%=mod;
intlen(ans);
for(int i=1;i<=k-len;i++) cout<<'0';
cout<<ans;
//system("pause>nul");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: