51Nod-1413 权势二进制

一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由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;
    }
}

阅读更多
版权声明:转载请告知博主并要注明出处嗷~ https://blog.csdn.net/Akatsuki__Itachi/article/details/79981581
个人分类: 51Nod
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭