【杭电】[5747]Aaronson
其实和那个问最少需用几张纸币付账的题目类似
由题意使 2m尽量大就好
#include<stdio.h>
int main() {
int T;
scanf("%d",&T);
while(T--) {
__int64 n,m;
scanf("%I64d %I64d",&n,&m);
if(n==0) {
printf("0\n");
continue;
}
__int64 t=1,cnt=1;
while(t<<1 <=n && cnt<=m) {
cnt++;
t<<=1;
}
__int64 sum=0;
while(n) {
sum+=n/t;
n%=t;
t>>=1;
}
printf("%I64d\n",sum);
}
return 0;
}
题目地址:【杭电】[5747]Aaronson