题目描述:
给一个二进制数字串,设它的十进制表示为 n ,问 1 到 n - 1有多少个 4 的整数次幂
特别傻吊的一个题,模拟进制也可以写,但是模拟进制太low了,换一个思路
首先,如果一个数的二进制是 100000000(开头是1后面全是0)设它是2的k次幂,那么类似于这样的1111111111(全是1)是 2 的 k+1 次幂 - 1
也就是说,它们中的4的整数次幂的个数最多差一个,或者相等
理由:
因为长度一定的二进制数,最多差一倍而已
如果这个数本身是4的整数次幂(即长度是奇数),如果数字串中有多余一个1,那么就可以包含当前的数(10000000这样的),如果后面全是0,则不用 +1
对于100000这样的如何求4的整数次幂有多少个,直接字符串长度除以2就ok了,因为每隔两位相当于乘以一个4
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int len = s.length();
int res = 0;
int f = 0;
res = len / 2;
for (int i = 0; i < len; i++)if(s[i] == '1')++f;
if(f > 1 && len & 1)++res;
printf("%d", res);
return 0;
}