荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Version (Who makes history and why), 信区: Program
标  题: [合集]问问大家一个简单的问题
发信站: 荔园晨风BBS站 (Tue Apr  8 22:13:45 2003), 站内信件

huhaiming (一生只爱她) 于Sat Apr  5 11:38:48 2003提到:

   写一个函数:

       判断其参数是否是2的乘方的函数

   有什么方法?


gybeango (Heymo) 于Sat Apr  5 11:52:24 2003提到:

参数可能很多呀,没有具体指明那一个吗?



Version (Who makes history and why) 于Sat Apr  5 11:52:41 2003提到:

 xixi


sailor (诚聘女友) 于Sat Apr  5 12:05:02 2003提到:

boolean  asdf(x)
{

x 除以2---有余数return false;
        没有余数
            商等于2--return true;
            商不等于2--  asdf(商)
}



huhaiming (一生只爱她) 于Sat Apr  5 12:09:29 2003提到:

就一个参数!!


michaelx (好好学习) 于Sat Apr  5 12:15:21 2003提到:

大概有多大?


huhaiming (一生只爱她) 于Sat Apr  5 12:26:15 2003提到:

边界情况没有考虑,你试试x=0的情况
怎么转都转不出来,死循环啊

          return false;


huhaiming (一生只爱她) 于Sat Apr  5 12:26:29 2003提到:

随便啦,在vc里面int足够啦



cycker (TryToDoEverythingOnLinux) 于Sat Apr  5 12:35:32 2003提到:

func(int x)

1 ,x>0?come on:return false

2, x %2 若等于0则继续,等于1则返回false
3, x /2=1 != 1则回到第2步.,若等于1返回true



   写一个函数:

       判断其参数是否是2的乘方的函数

   有什么方法?


huhaiming (一生只爱她) 于Sat Apr  5 12:40:46 2003提到:

1、负数没有考虑!!!

这样做好像挺烦噢,而且 第三那里x /2=1 != 1应该是x/2==1 != 1 吧?

显然地,0也忘了考虑



michaelx (好好学习) 于Sat Apr  5 12:41:35 2003提到:

我想了一下。想到两个方法。
第一个:狂除2,遇到不余数不为0就false,除到商为1就为true;
第二个:先键一个二叉树,放晒地2得N次方进去,然后再查找二叉树
找到true,找不到false


Version (Who makes history and why) 于Sat Apr  5 12:48:13 2003提到:

 可以建立一个数组
 a[100]={2,4,8,16,32,64,...}
 a[i]=2^(i+1)

 for(int i=0;i<a.length;i++){
     if(m%a[i]) return  0;

     else
       if(a[i]>m) break;
 }
 return 1;


Version (Who makes history and why) 于Sat Apr  5 12:52:57 2003提到:

 二叉树的好点。
 呵呵


cycker (TryToDoEverythingOnLinux) 于Sat Apr  5 13:04:20 2003提到:

        ~~~~~~~~~~~~~~~~~~~~~~~这句是考虑负数的。



Mic (酷鱼) 于Sat Apr  5 13:07:51 2003提到:

IF 最高位=1 THEN
BEGIN
  从最高位开始,遍历所有次高位,
  出现“1”,RETURN FALSE
        ELSE RETURN TRUE
END
ELSE
  RETURN FALSE



Mic (酷鱼) 于Sat Apr  5 13:08:59 2003提到:

没有考虑负数



birdhere (一无所有) 于Sat Apr  5 13:09:54 2003提到:

# include <iostream.h>
# include <math.h>

void main(void)
{float num;
 cout<<"please input a number:"<<endl;
 cin>>num;

 if (num>0) if( floor(log(num)/log(2))==log(num)/log(2) ) {cout<<"YES!";return;}
 cout<<"NO!";
 return;
}



Chengal (努力学习) 于Sat Apr  5 13:18:50 2003提到:

用abs(x);


huhaiming (一生只爱她) 于Sat Apr  5 13:20:52 2003提到:

几十亿的时候搞死你



cycker (TryToDoEverythingOnLinux) 于Sat Apr  5 13:21:39 2003提到:

#include <stdio.h>
short test(int);
int main()
{
        int i;
        for(i=-10000;i<100000;i++)
                if(test(i) == 1)
                        printf("\t%d is \n", i);

}
short test(int s)
{
        int tmp;
        if (s <=0) return (0);
        while(1)
        {
                tmp = s % 2;
                if (tmp == 1) return (0);
                s /= 2;
                if (s == 1) return 1;
        }
}


huhaiming (一生只爱她) 于Sat Apr  5 13:21:53 2003提到:

0的情况呢?


huhaiming (一生只爱她) 于Sat Apr  5 13:23:37 2003提到:

test(0)
显然是return 0;
负数和0都没有判断


cycker (TryToDoEverythingOnLinux) 于Sat Apr  5 13:36:38 2003提到:

唉,忘了还有1,和负数次方。



noid (奥运在北京) 于Sat Apr  5 13:40:18 2003提到:

ft!说了一大堆~高中的数学是怎么学的?用log不就行了?一句话的事情



Version (Who makes history and why) 于Sat Apr  5 13:49:48 2003提到:

  用位移操作.

  一个数除于2就相当于右移一位。



cycker (TryToDoEverythingOnLinux) 于Sat Apr  5 13:54:35 2003提到:

不要提起让我自悲的数学好不好?


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店