用二进制表示是最少的
把m变成二进制,那么用m的二进制的位数那么多钱袋就可以了
比如m=11010
那么多个钱袋放1,10,100,1000.10000,最多可以达到11111
所以这道题就是求m的二进制位数
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int n,m;
int main()
{
scanf("%lld", &m);
n=0;
while (m>0)
{
n++;m>>=1;
}
printf("%d\n", n);
}