您的位置:首页 > 其它

poj 1150 The Last Non-zero Digit 求排列数的最后非零数

2015-11-16 12:20 323 查看
//poj 1150
//sep9
#include <iostream>
using namespace std;

int table[4][4]={
6,2,4,8,
1,3,9,7,
1,7,9,3,
1,9,1,9,
};
int f2(int n)
{
if(n==0) return 0;
return n/2+f2(n/2);
}
int f5(int n)
{
if(n==0) return 0;
return n/5+f5(n/5);
}
int g(int n,int x)
{
if(n==0) return 0;
return n/10+(n%10>=x)+g(n/5,x);
}
int f(int n,int x)
{
if(n==0) return 0;
return f(n/2,x)+g(n,x);
}
int main()
{
int n,m,num2,num3,num5,num7,num9;
while(scanf("%d%d",&n,&m)==2){
num2=f2(n)-f2(n-m);
num5=f5(n)-f5(n-m);
num3=f(n,3)-f(n-m,3);
num7=f(n,7)-f(n-m,7);
num9=f(n,9)-f(n-m,9);
int res=1;
if(num2<num5){
printf("5\n");
continue;
}
if(num2!=num5){
res*=table[0][(num2-num5)%4];
res%=10;
}
res*=table[1][num3%4];
res%=10;
res*=table[2][num7%4];
res%=10;
res*=table[3][num9%4];
res%=10;
printf("%d\n",res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 算法