A.BowWow and the Timetable
•题意
给你一个二进制数,让你求小于这个数的所有4的幂的个数
•思路
第一反应是二进制与四进制转换
(其实不用真正的转换 QwQ)
由于二进制的两位对应四进制的一位
所以可以得到四进制下的位数
四进制的位数就是小于等于这个数的所有4的幂的个数,类比10进制下10的幂
由于不能有等于,所以根据二进制判断一下这个数是不是4的幂
因为12,1002,100002 ,二进制下4的幂除了首位的1,后面是偶数个0
所以判断是否是1带偶数个0,是的话个数减一
•代码
View Code1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 char s[maxn]; 5 int main() 6 { 7 scanf("%s",s+1); 8 int len=strlen(s+1),flag=0; 9 int cnt=(len+1)/2; 10 for(int i=2;i<=len;i++) 11 if(s[i]=='0') flag++; 12 if(flag==len-1 && len&1) 13 cnt--; 14 printf("%d\n",cnt); 15 }