题目描述
鱼大大为了给羊大大过生日,于是跑到了商城准备买一堆不同价格的礼物送给羊大大。
商城里礼物价格分别是 1 元, 2 元, 4 元, 8 元, 16 元....后面一个是前面的 2 倍。每个价格的商品只有 1 个,鱼大大可以随意挑选。
为了打肿脸充胖子,鱼大大觉得只有花至少 A 元买礼物才不会掉面子。然而鱼大大带的钱有是有限的,所以礼物的价格合计不能超过 B 元。
问鱼大大最多能买多少个礼物?
输入格式
多组测试。第一行一个整数 T,表示测试组数量。
接下来 T 行,每行 2 个整数为一组,为鱼大大至少要花的钱和最多能花的钱。
输出格式
每行一个整数表示鱼大大最多能买多少礼物。
样例
Input 1
2
16 25
4 8
Output 1
4
3
样例解释
对于第一组数据:
鱼大大可以买 1 元、 2 元、 4 元、 16 元这 4 个礼物共计 23 元;
对于第二组数据: 鱼大大可以买 1 元、 2 元、 4 元这 3 个礼物共计 7 元 (方案可能不唯一,只需输出最多数量)
25pts求调
#include <bits/stdc++.h>
using namespace std;
long long t, a, b, sum, x[63]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904};
int main() {
cin>>t;
for(int i=1; i<=t; i++) {
sum=0;
cin>>a>>b;
for(int j=0; j<=63; j++) {
if(b>=x[j]) {
b-=x[j];
sum+=1;
} else {
break;
}
}
cout<<sum;
if(i!=t) cout<<endl;
}
return 0;
}