高人指导:统计2的N次方的数的个数

xlu0706 2013-03-27 06:53:25
一维数据中,统计是2的N次方的元素的个数,其中N=0,1,2...,以下是本人写的程序,请高人指导一下其中的bug!

#include "stdio.h"

#define N 5

int main()
{

int iArray[N];
int i = 0;
int nCount = 0;

for(i = 0;i < N && scanf("%d",&iArray[i]) == 1;i++);

for(i = 0;i < N;i++)
{
if(iArray[i] > 0)
{
while(iArray[i] % 2 == 0)
{
iArray[i] /= 2;
}

if(iArray[i] == 1)
{
nCount++;
}
}
}

printf("%d\n",nCount);

return 0;
}



...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlu0706 2013-03-27
  • 打赏
  • 举报
回复
引用 4 楼 xlu0706 的回复:
[quote=引用 3 楼 lxyppc 的回复:] 满足2的n次方的数,也满足这个条件 (x-1)&x==0
修改后的代码为:

#include "stdio.h"

#define N  5

int main()
{
	int iArray[N];
	int i = 0;
	int nCount = 0;
	
	for(i = 0;i < N && scanf("%d",&iArray[i]) == 1;i++);

	for(i = 0;i < N;i++)
	{	
		if(iArray[i] > 0)
		{
			//while(iArray[i] % 2 == 0)
			//{
			//	iArray[i] /= 2;
			//}

			//if(iArray[i] == 1)	
			//{
			//	nCount++;			
			//}
			if(((iArray[i] - 1) & iArray[i]) == 0)
				nCount++;
		}		
	}
	
	printf("%d\n",nCount);

	return 0;	
}

[/quote] 此时运行速度提高了,但是还有些问题,不知道怎么修改了!
xlu0706 2013-03-27
  • 打赏
  • 举报
回复
引用 3 楼 lxyppc 的回复:
满足2的n次方的数,也满足这个条件 (x-1)&x==0
修改后的代码为:

#include "stdio.h"

#define N  5

int main()
{
	int iArray[N];
	int i = 0;
	int nCount = 0;
	
	for(i = 0;i < N && scanf("%d",&iArray[i]) == 1;i++);

	for(i = 0;i < N;i++)
	{	
		if(iArray[i] > 0)
		{
			//while(iArray[i] % 2 == 0)
			//{
			//	iArray[i] /= 2;
			//}

			//if(iArray[i] == 1)	
			//{
			//	nCount++;			
			//}
			if(((iArray[i] - 1) & iArray[i]) == 0)
				nCount++;
		}		
	}
	
	printf("%d\n",nCount);

	return 0;	
}

lxyppc 2013-03-27
  • 打赏
  • 举报
回复
满足2的n次方的数,也满足这个条件 (x-1)&x==0
xlu0706 2013-03-27
  • 打赏
  • 举报
回复
个人觉得还有些吧,主要是想知道哪些没有考虑到
重庆-老白 2013-03-27
  • 打赏
  • 举报
回复
这代码我怎么看着挺混乱的

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧