題目描述
現在夯夯和朱朱餓了,他們想去喫點東西,他們發現店裏東西的價格都是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;
}
}