题解 | #排列与二进制#

排列与二进制

https://www.nowcoder.com/practice/647fc23dc4e147328cc484e3aeb6cc2a

//p(n, m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! (规定0!=1).
//归根结底就是在问n*(n-1)*……*(n-m+1)能整除几次2。
//也就是上述乘积里面能分解出几个2。
//那么,可以把每个乘数分别判其断能分解出的2的数量,然后加在一起就是乘积能分解出的2的数量。
#include<stdio.h>
#define maxsize 1000
int main() {
    int n, m, temp;
    while (scanf("%d%d", &n, &m) != EOF) {
        if (n == 0)
            return 0;
        int count = 0;
        for (int i = n; i >= n - m + 1; i--) {
            temp = i;
            while (temp % 2 ==
                    0) { //每个乘数:判其断能分解出的2的数量  16分解出4个2
                count++;
                temp = temp / 2;

            }
        }
        printf("%d\n", count);


    }


    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-05 15:27
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务