程序求dalao纠错,找半天找不出来
题目是要讲几组区间里数据转换成二进制数,如果二进制数中只有一个0,则总数加一
比如输入:2 输出:2
5 10 1
2015 2015
就是说2组数据,第一组【5,10】中二进制只有一个0的有2个,输出2
第二组【2015,2015】中二进制只有一个0的有一个输出1
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
int main()
{
int a[100],i,m,n,s=0,ls,zs=0,left,right,zu;
i=0;
scanf("%d",&zu);
for (int j=1;j<=zu;j++)
{
scanf("%d%d",&left,&right);
for (int k=left;k<=right;k++)
{do
{
m=k/2;
n=k%2;
k=m;
a[i++]=n;
}while(m!=0);
i--;ls=i+1;
for (;ls>=0;ls--)
{if (a[ls]==0)s++;
}
if (s==1)zs++;s=0;
}
printf("%d",zs);
}
return 0;
}
首先你的循环算法有问题,你的
k=m;
在循环中改为循环变量的值,导致死循环了
其次,你题目的例样输入、输出也不对啊
5 6 7 8 9 10中
单单二进制的8就有3个0,结果怎么可能是2
而2015的二进制为
011111011111,它是2个0
以下是改过的程序
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
int main()
{
int a[100],i,m,n,s=0,ls,zs=0,left,right,zu;
// i=0; 这个i不用的
scanf("%d",&zu);
for (int j=1; j<=zu; j++)
{
scanf("%d%d",&left,&right);
zs=0; //每组要初始化的
for (int k=left; k<=right; k++)
{
///你的循环完全不对
m=k; //简单地就可以实现
while(m)
{
m/=2;
zs+=!(m%2);
}
}
printf("%d ",zs); //输出加回车
}
return 0;
}