poj 3406 Last digit 求组合数的最后非零数

来源:互联网 发布:同望软件培训 编辑:程序博客网 时间:2024/05/29 13:13

题意:

求组合数C(n,m),n>=m的最后非0数。

分析:

与求排列数的最后非0数类似,要注意分母上以3结尾的数可能比分子上的多,要特殊处理。

代码:

//poj 3406//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)-f2(m);num5=f5(n)-f5(n-m)-f5(m);num3=f(n,3)-f(n-m,3)-f(m,3);num7=f(n,7)-f(n-m,7)-f(m,7);num9=f(n,9)-f(n-m,9)-f(m,9);num3+=num9*2,num9=0;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;} 


0 0
原创粉丝点击