神奇的表面二进制数-创新互联

题目描述

创新互联建站长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为青海企业提供专业的成都网站设计、成都网站制作青海网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

我们定义一个各个位只有0和1的十进制数为表面二进制数。例如0,1,10,11,101,110011都是表面二进制数,而2,12,900却不是。

现在给你一个n,计算一下最少要多少个表面二进制数相加才能得到n。

输入

多组输入

每次输入一个数n (n为任意正整数,大不超过long long)

输出

输出最少的数目

样例输入 复制

9

样例输出 复制

9

1.这个题目大次数是9,我们仔细观察,会发现想让它最小,就是按他每一位的大小得到一个值 

如果我们想使它们次数最小,那么每一次都尽可能取每一位的大值。不能让它借数,否则适得其反。

代码如下:

#includeint slove(long long n)
{
	if(n<=0) return 0;
	long long i,k=n,s=0,w=1;
	while(k)
	{
		s=s+w*((k%10)>=1?1:0);
		k/=10;
		w*=10;
	}
	return slove(n-s)+1;
}
int main()
{
	long long n;
	while(~scanf("%lld",&n))
	{
		printf("%d\n",slove(n));
	}
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:神奇的表面二进制数-创新互联
网页地址:http://scyanting.com/article/dcsocj.html