输入一个十进制整数
。
输出一个整数,表示
的二进制表示中,最长连续
段的长度。
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;
}