题目描述
一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如0,1,101,110011都是权势二进制而2,12,900不是。
当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n。
输入
单组测试数据。
第一行给出一个整数n (1<=n<=1,000,000)
输出
输出答案占一行。
输入样例
9
输出样例
9
题解:
用0和1两个数字来表示的十进制数就是权势二进制,给定一个数n,要求最少多少个这样的数相加可以得到,直接给出结论:
找到所有数位中最大的那个数即可、
例如: 12045 为了满足到最后的那个5,就必须要有五个带1的权势二进制数,那其他的位数肯定也能满足了。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <deque>
#include <list>
#include <utility>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <bitset>
#include <iterator>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double E = exp(1.0);
const int MOD = 1e9+7;
const int MAX = 1e5+5;
int n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(cin >> n)
{
int max_num = 0;
while(n)
{
if((n%10) > max_num)
{
max_num = n%10;
}
n /= 10;
}
cout << max_num << endl;
}
return 0;
}