一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如0,1,101,110011都是权势二进制而2,12,900不是。
当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n。
Input
单组测试数据。
第一行给出一个整数n (1<=n<=1,000,000)
Output
输出答案占一行。
Input示例
9
Output示例
9
对于输入的数,每次都减去一个权势二进制,直到串变为0就可以
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<iomanip>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define swap(a,b) (a=a+b,b=a-b,a=a-b)
#define X (sqrt(5)+1)/2.0 //Wythoff
using namespace std;
typedef long long int LL;
const int MAXL(1e3);
const int INF(0x3f3f3f3f);
const int mod(1e9+7);
int dir[4][2]= {{-1,0},{1,0},{0,1},{0,-1}};
int main()
{
ios_base::sync_with_stdio(false);
string str;
while(cin>>str)
{
string ss;
for(int i=0; i<str.size(); i++)
ss+='0';
int len=0,i;
while(str!=ss)
{
for(i=0; i<str.size(); i++)
{
if(str[i]!='0')
str[i]=str[i]-1;
}
len++;
}
cout<<len<<endl;
}
}