欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1582 倒水(洛谷)

程序员文章站 2022-03-13 16:59:42
...

P1582 倒水(洛谷)
只要求出的n转为二进制下,有k个1即可。
lowbit(n)取出非负整数n在二进制表示下最低位的1以及它后边的0构成的数值。
__builtin_popcountll(n)求出非负整数n在二进制表示下有几个1。
让n一直加lowbit(n),进位减少二进制表示下1的个数。

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
	ll n,k,sum;
	scanf("%lld %lld",&n,&k);
	sum=n;
	while(__builtin_popcountll(sum)>k){
		sum+=sum&-sum;
	}
	printf("%lld\n",sum-n);
	return 0;
}
相关标签: 数论