题目描述
现在夯夯和朱朱饿了,他们想去吃点东西,他们发现店里东西的价格都是2的次方倍(1,2,4,8 …)
现在夯夯和朱朱想把他们的的钱全都用掉。夯夯想知道他们最少能吃多少东西,朱朱想知道他们最多能吃多少东西?
由于穿越后遗症的原因,他们的大脑无法思考,现在你能回答他们的问题吗?
输入格式
多组样例,每组样例占一行,每行一个整数,代表他们拥有的总钱数。
输出格式
分别回答他们的问题,答案用空格隔开。
输入输出样例
输入
2
1
输出
1 2
1 1
说明/提示
样例数量 ≤ 10^410
4
总钱数 ≤ 10^{18}10
18
题目分析
最多能吃多少,显然,全选价值为1的能达到最多,
最少是多少,显然是从高价到低价选,只要注意钱要刚好用完,比如9元选的是8 1,7元选的是4 2 1,六元选的是4,2
总结出规律了吗?
最少就是把钱数化为二进制看有多少个1
题解如下:
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main () {
long n;
long max, min;
while(cin >> n) {
max = n;
min = 0;
while(n) {
if(n%2) min++;
n/=2;
}
cout << min << " " << max << endl;
}
}