设为首页 加入收藏

TOP

最后一个非零数字(POJ 1604、POJ 1150、POJ 3406)(九)
2019-06-11 12:08:21 】 浏览:341
Tags:最后 一个 数字 POJ 1604 1150 3406
bsp;     if (cnt2==0)

                        cnt2 = 1;

                  else

                        cnt2=last[0][cnt2%4];

                  cnt3=last[1][cnt3%4];

                  cnt7=last[2][cnt7%4];

                  cnt9=last[3][cnt9%4];

            cout<<cnt2 * cnt3 * cnt7 * cnt9 % 10<<endl;

              }

              else

                     cout<<5<<endl;

       }

    return 0; 

  • 组合数C(m,n)的最后一个非0数字

      在理解了上述编程思路后,可以继续尝试解决POJ 3406问题“Last digit”。即输入整数n和m (1000000≥n≥m≥1),求组合数C(m,n)的最后一个非0数字。

.

    将上面的“可Accepted的源程序3”的main函数改写为:

int main() 

    int last[4][4] ={{6,2,4,8},{1,3,9,7},{1,7,9,3},{1,9,1,9}};  

    int n,m,res=1,cnt2,cnt3,cnt5,cnt7,cnt9;

    cin>>n>>m;

    cnt2 = getFactor(n,2) - getFactor(n-m,2)- getFactor(m,2); 

    cnt5 = getFactor(n,5) - getFactor(n-m,5)- getFactor(m,5); 

    cnt3 = getLast(n,3) - getLast(n-m,3)- getLast(m,3); 

    cnt7 = getLast(n,7) - getLast(n-m,7)- getLast(m,7); 

    cnt9 = getLast(n,9) - getLast(n-m,9)- getLast(m,9); 

    if(cnt2<cnt5) res*=5;

    else if(cnt2>cnt5) res*=last[0][(cnt2-cnt5)%4];

    res*=last[1][(cnt3%4+4)%4];   // 考虑负数时的正向取模

    res*=last[2][(cnt7%4+4)%4];

    res*=last[3][(cnt9%4+4)%4];

    cout<<res%10<<endl;

    return 0; 

      提交给POJ网站,评判程序显示结果“Accepted”。

首页 上一页 6 7 8 9 下一页 尾页 9/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Example: Getting WMI Data from .. 下一篇POJ中和质数相关的三个例题(POJ ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目