能力值:
( LV6,RANK:87 )
|
-
-
2 楼
#include<stdio.h> #include<string.h> #include<cstdlib> int main() { int n,i; long long goin; char a[2]; int k; scanf("%d",&n); for(k=0;k<n;k++)//while(n--) { int jishu=0,jishu2=0; char bin[33]; strcpy(bin,"00000000000000000000000000000000"); scanf("%I64d",&goin); itoa(goin,bin,2);//将输入的十进制数转成二进制,存到bin数组里面 for(i=0;i<32;i++)//不断循环取每个字符(0-31号) { strncpy(a,bin+i,1); if(strcmp(a,"1")==1) { jishu++; if(i==31) { goto x; } } else { x: if(jishu>jishu2) { jishu2=jishu; } jishu=0;//临时计数清零 }
} printf("%d\n",jishu2); } }
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
你的代码中有个根本性的错误,strcmp(a,"1")==1是错的,因为strcmp操作数相等时返回0,应该改为strcmp(a,"1")==0。其次是第二个for循环i<32不合适,因为itoa后bin的长度strlen(bin)不是32。改成int len=strlen(bin), .....,i<len,.....,i==len-1。最后是算法不够高效,直接求余数与1比较会更快
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
C语言,最头痛的语言
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
给个参考:#include <stdio.h>
int main()
{
int k=0;
scanf("%d",&k);
while(k--)
{
int n=0;
int saveCount = 0;
int count = 0;
scanf("%d",&n);
while(n>0)
{
if(n&0x1)
{
++count;
}
else
{
if(count > saveCount)
{
saveCount = count;
}
count = 0;
}
n >>=1;
if(n == 0)
{
if(count > saveCount)
{
saveCount = count;
}
}
}
printf("%d\n",saveCount);
}
}
|
能力值:
( LV6,RANK:87 )
|
-
-
6 楼
.
最后于 2018-11-6 16:52
被Lixinist编辑
,原因: 之后调试发现是自己问题
|
能力值:
( LV6,RANK:87 )
|
-
-
7 楼
青史无疆
你的代码中有个根本性的错误,strcmp(a,"1")==1是错的,因为strcmp操作数相等时返回0,应该改为strcmp(a,"1")==0。其次是第二个f ...
先感谢指导。
最后于 2018-11-6 16:53
被Lixinist编辑
,原因: strcmp相等,的确是返回0。之前是自己写错了
|
能力值:
( LV6,RANK:87 )
|
-
-
8 楼
青史无疆
你的代码中有个根本性的错误,strcmp(a,"1")==1是错的,因为strcmp操作数相等时返回0,应该改为strcmp(a,"1")==0。其次是第二个f ...
我刚才又拿strncmp试了一下,这个函数相等时就返回了0
|
能力值:
( LV6,RANK:87 )
|
-
-
9 楼
我把strcmp的用法纠正过来了,while和for循环就都可以通过了。不过还是想不通,strcmp用错时,为什么会出现用for循环能通过,用while循环却不通过
|
能力值:
( LV7,RANK:118 )
|
-
-
10 楼
这里面用goto语句,还这么用,这倒是第一次见
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
最后于 2018-11-11 14:15
被哈士奇去上学编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
hello#include <iostream>
#include <cstdint> //for uint32
int foo(uint32_t n)
{
int maxcnt = 0; //保存之前的最大bit1连续个数
int curcnt = 0; //保存当前bit1连续个数
for (int i = 0; i < 32; ++i) //右移并测试
{
if (n & 0x01) //当前最低位是否为1
{
curcnt++;
}
else
{
if (curcnt > maxcnt)
maxcnt = curcnt;
curcnt = 0;
}
n >>= 1;
}
return maxcnt;
}
int main()
{
uint32_t n;
int k;
std::cin >> k;
while (k--)
{
std::cin >> n;
std::cout << foo(n) << std::endl;
}
/*std::cin.get();
std::cin.get();*/
}
|
|
|