(纪中)2154. 权势二进制【数学】

(File IO): input:a.in output:a.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet


题目描述
一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如 0 1 101 110011 0,1,101,110011 都是权势二进制而 2 12 900 2,12,900 不是。
当给定一个 n n 的时候,计算一下最少要多少个权势二进制相加才能得到 n n


输入
k k 组测试数据。
1 1 行给出一个整数 k ( 1 < = k < = 10 ) k (1<=k<=10)
2 2 k + 1 k+1 行每行一个整数 n ( 1 < = n < = 1000000 ) n(1<=n<=1000000)

输出
输出答案占 k k 行。
每行为每个 n n 的答案。


样例输入
1
9

样例输出
9


数据范围限制


解题思路
思路:贪心
因为每一位最多为 1 1 ,所以就求出最大的数字(每个位置上)


代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int k,n,maxn;
int main(){
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	scanf("%d",&k);
	for(int i=1;i<=k;i++)
	{
		maxn=0;
		scanf("%d",&n);
		while(n){
			maxn=max(maxn,n%10);
			n/=10;
		}
		printf("%d\n",maxn);
	}
}
发布了73 篇原创文章 · 获赞 5 · 访问量 1818

猜你喜欢

转载自blog.csdn.net/kejin2019/article/details/104223552