文章
26
粉丝
0
获赞
13
访问
1.9k
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m&&(n!=0&&m!=0)){
int num=0;
for(int i=n-m+1;i<=n;i++){
int k=i;
while(k%2==0){
num++;
k=k/2;
}
}
cout<<num<<endl;
}
return 0;
}
思考:
1. 排列数转换为二进制末尾的0是怎么生成的? 是因为原数直接对2不断取余,最开始一直是0。
2. 如何达到1中的效果?可以直接把相除剩下的(n-m+1~n)项每一项单独对2取余,遇到取余后余数不是0的项直接跳过即可,因为它们是相乘关系,只要有其他项符合即可。
登录后发布评论
暂无评论,来抢沙发