#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
printf("case #%d:\n",i);
int m;
scanf("%d",&m);
int k=0,a[33];
do{
int t=m%2;
a[k++]=t;
m=m/2;
}while(m);
int count=1,f=0;
for(k=k-1;k>0;k--){
if(a[k]!=a[k-1])count++;
else{
if(f<=count){
f=count;
count=1;
}
else count=1;
}
}
if(count>=f)f=count;
printf("%d\n",f);
}
return 0;
}
若要找到非重复二进制串,首先应该列出整数的二进制串,这里就是基础的取余数的方法得到串存于a数组中,注意其中的顺序是相反的。因此从数组后往前,即从低位到高位判断非重复二进制串的条件。count用来计数串的长度,f用来存历史存在的非重复串长度,当count停止计数时如果比历史长度f还要长,则f赋count的值,count归1;如果没有f长则直接count归1,结束循环后就从产生重复的那个位置开始继续判断。
为了防止出现count直接计数到a数组头的情况,再在循环结束后增加判断count与f大小的判断,找出最长非重复二进制串输出。