题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5747
我们首先把这个数换成以二进制表示,很明显,在m位之前的,有1的那位我们就+1,没有的就不加。在m范围外的,很明显,我们用第m位去凑需要的数量最小。
#include <cstdio>
#include <cstring>
int main()
{
int n,m;
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n,&m);
int num = 0;
for(int i=31; i>=0; i--)
{
if(n&(1<<i))
{
if(i > m) num += 1<<(i-m);
else num++;
//printf("%d %d\n", i, num);
}
}
printf("%d\n", num);
}
}
HDU 5747 题解
本文提供了一种解决HDU 5747问题的有效算法。通过将数字转换为二进制形式,并针对不同位进行判断,以此来计算所需的最小数值。代码实现简洁高效。
307

被折叠的 条评论
为什么被折叠?



