荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店