输入一个十进制整数
。
输出一个整数,表示
的二进制表示中,最长连续
段的长度。
200
2
在这个样例中,十进制
等于二进制
,其中最长连续
段的长度为
。
1023
10
在这个样例中,十进制
等于二进制
。
本题数据已规范为单组询问(2025/01/15)。
#include <stdio.h> #include <string.h> int main() { /* //解法一,求数字的二进制写法有多少个连续的1 int num = 0; int max = 0; // max length int length = 0; int temp[100]; int m = 1; while (scanf("%d", &num) != EOF) { max = 0; length = 0; m = 1; for (int i = 0; i < 32; i++) { if (num & m) { length++; } else { if (max < length) { max = length; } length = 0; } m = m << 1; } if (max < length) { max = length; length = 0; } printf("%d", max); } */ /* 解法二,求数字的二进制写法有多少个连续的1*/ int num = 0, count = 0, total = 0, len = 0, i = 0; char out[32]; while (scanf("%d", &num) != EOF) { len =0; //重置 count = 0; //重置 total = 0; //重置 memset(out, '0', sizeof(out)); //重置 while (num) { //取每一位写入数组 out[len++] = '0' + (num & 0x1); num = num >> 1; } //累计连续的1的个数,遇到1递增,遇到0重置为0 for (int j = 0; j < len; j++) { if (out[j] == '1') { count++; if (count > total) total = count; } else { count = 0; } } } printf("%d", total); return 0; }
#include <stdio.h> int main() { int t,n; //scanf("%d",&t); //while(t--){ int count=0; int tmp=0; scanf("%d",&n); while(n){ if(n&0x01){ tmp++; } else{ tmp=0; } if(tmp>count) count=tmp; n=n>>1; } printf("%d\n",count); //} return 0; }所以题目给的数据组数是什么意思呢?本来还以为需要格式控制,结果发现没有格式控制。
#include<stdio.h> int main() { int in; while(scanf("%d", &in) != EOF) { int count = 0; int max = 0; while(in != 0) { if(in & 1 == 1) count ++; else count = 0; max = (max > count) ? max : count; in = in >> 1; } printf("%d\n", max); } return 0; }
#include <stdio.h> int main() { int num = 0; while(scanf("%d",&num) != EOF) { int width = 0 ,Ret = 0; int tmp = 0; while(num) { tmp = num%2; if(1 == tmp) width++; else { if(width > Ret) Ret = width; width = 0; } num = num/2; } if(width > Ret) Ret = width; printf("%d\n",Ret); } return 0; }
int main()
{
int num;
int flag;
int max;
int temp[16] = { 0 };
while (scanf("%d", &num) != EOF)
{
flag = 0;
max = 0;
if ((num >= 0) && (num <= 255))
{
max = 0;
int dp[16] = { 0 };
for (int i = 0; i<16; i++)
{
if((num >> i) & 0x01)
{
max = max + 1;
dp[max] = max;
}
else
{
max = 0;
}
}
//查找连续的1
for (int i = 15; i >= 0; i--)
{
if (dp[i] == i)
{
printf("%d\n", dp[i]);
break;
}
}
}
}
return 0;
}