题解 | #排列与二进制# 需要找规律
排列与二进制
https://www.nowcoder.com/practice/647fc23dc4e147328cc484e3aeb6cc2a
#include <iostream> #include <vector> using namespace std; int n, m; // vector<int> mul(vector<int> &a, int b) //使用乘法超时,必须要找规律 // { // vector<int> c; // int t = 0; // for(int i = 0; i < a.size() || t; i++) // { // if(i < a.size()) t += a[i] * b; // c.push_back(t % 2); // t /= 2; // } // return c; // } int main() { while(cin >> n >> m && n) { // vector<int> res; // int tmp = n - 1, count = 0, l = n - m + 1; // while(n) // { // res.push_back(n % 2); // n /= 2; // } // while(tmp >= l) // { // res = mul(res, tmp); // tmp--; // } // for(int i = 0; i < res.size(); i++) // if(res[i] == 0) count++; // else break; // cout << count << endl; int count = 0; for(int i = n; i >= n-m+1; i--) { int k = i; while(k % 2 == 0) { count++; k /= 2; } } cout << count << endl; } } // 64 位输出请用 printf("%lld")