• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

CSU 1021 B(Contest #3)

Description

 

从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下:

C(m, n) = m!/((m - n)!n!) 

现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。

Input

 

第一行是测试样例的个数T,接下来是T个测试样例,每个测试样例占一行,有两个数,依次是m和n,其中n ≤ m≤ 1000。

Output

 

分别输出每一个组合数转换成二进制数后末尾零的数量。

Sample Input

2
4 2
1000 500 

Sample Output

1
6 

# include <stdio.h>

int f[] = {0,1,3,7,15,31,63,127,255,511};
int main()

{
  int T, m, n, i, ans;
  scanf("%d", &T);
  while (T-- > 0)

  {
    ans = 0;
    scanf("%d%d", &m, &n);
    for(i=0; i<10; ++i)

    {
      if (m>>i & 0x1)ans += f[i];
      if (n>>i & 0x1)ans -= f[i];
      if ((m-n)>>i & 0x1)ans -= f[i];
    }
    printf("%d\n", ans);
  }
  return 0;
}

posted on 2015-07-19 21:02  tony-cao  阅读(116)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3