扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
题目描述
创新互联建站长期为千余家客户提供的网站建设服务,团队从业经验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元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流