2个C++程序问题,求高人解答

来源:百度知道 编辑:UC知道 时间:2024/05/23 19:06:15
第一个程序是从键盘输入一个数,看是不是2的指数。。
程序后面输出2个数。第一个是判断x是不是2的指数用的:
1->不是2的指数
0->是2的指数
第二个数是求函数运行所需的时间的。
关键是所需的时间无限是0,我觉得我的时间函数没有用错请高人帮忙看一下,谢谢。
#include<iostream.h>
#include<time.h>
#define CLOCKS_PER_SEC ((clock_t)1000)

unsigned int chu(unsigned int x)
{
if(x<2) return x;
else return chu(x%2);
}

void main()
{
clock_t start,finish;
unsigned int x;
short y;
double a;
cin>>x;
start=clock();
y=chu(x);
finish=clock();
a=(double)((finish - start) / CLOCKS_PER_SEC)/1.0;
cout<<y<<" "<<a<<endl;
}

==============================================
第二个程序:
是求1个数的leading zero的。比如在int 型下,1的leading zero 有31个,-1的leading zero 是0个。
问题是,一般的值都能通过测试,但是用0测试这个程序,确什么输出也没有,只有光标在那里闪。请高人帮忙看一下,谢谢。。
#include&

第一个改为:unsigned int chu(unsigned int x)
{
if(x<2) return x;
else if(x%2==1)
return 1;
else
return chu(x/2);
}
main函数中
a=(double)(finish - start) / CLOCKS_PER_SEC;
这时你也会发现是0,这是因为你输入的数太小了。这时你可在chu函数中加入int k=100000;while(k--);来测试。
第二个改为:
int Numofzero(int x)
{
int i;
int j=0;
if(x==0)
return 32;//这是因为你在后面的for循环中:如果x==0时,是死循环当然不动了。
for(i=0;j=1;i++)
{
if(x&(1<<(sizeof(int)*8-1-i)))
{
j=1;
return i;
}
}
}

不好意思,我刚接触C++,连时间函数怎么用都还不会呢。不过你的第一个算法可改进一下,比如 5498794651 显然不是2的指数,没必要反复除2。。。

方法

我想请教一下 什么叫2 的指数

还有 能循环别递归 真的!

不好意思,我刚接触C++,连时间函数怎么用都还不会呢。不过你的第一个算法可改进一下,比如 5498794651 显然不是2的指数,