标签:数学 str 存储 host 思路 数位 bool upload 进制
这是个数学解法,鄙人花了好久才想出来的,所以
求\(1\)~\(n\)区间各个数位上只有0与1的数字的个数。
打个表,分析一下
如果没那么巧,不是像二进制的十进制数时要如何处理呢?
我们很轻易的就能发现,在到达下一个像二进制的十进制数前,无论\(n\)多大,个数都是不变的。
\(1\)$11$区间内有$3$个**像二进制的十进制数**,$1$\(12\)区间内也有\(3\)个像二进制的十进制数,
\(1\)~\(15\)区间内也是一样的。
直到\(n=100\)时,数量才发生变化,变为了\(4\)个。
所以,得出结论:
是不是很绕
最大的\(≤n\)的像二进制数的十进制数\(=11\)
将其看作二进制数时所对应的十进制数值\(=3\)
\(ans=3\) (数字分别有\(1\),\(10\),\(11\))
放一下找最大的\(≤n\)的像二进制数的十进制数的代码
bool flag=0;//用于标记上面几位是否有减小
int w[/*n的长度*/];//w数组用来存储n的各个数位
for(int i=0;i<len;i++)
{
if(flag)//如果上面几位有减小
w[i]++;//这一位必定是1
if(w[i]>1)//判断这位是否有减小
flag=1;
if(w[i])//只要不是0这位就必定是1
w[i]=1;
}
这一段思路不好了解,大家如有不懂建议多看几遍
剩下的数位分离和进制转换部分就不用我放代码了吧
(\(write\) \(in\) \(2021/2/10\),阴历腊月廿九)
留个赞再走吧( ̄︶ ̄)↗
\(The\) \(End\)
标签:数学 str 存储 host 思路 数位 bool upload 进制
原文地址:https://www.cnblogs.com/jerrywang-blogs/p/14900428.html