2021-05-03 :一种方法,它给出非负整数num,不使用循环语句,返回=num且最接近num的有2的幂。
福大解答2021-05-03 :
32位整数,N=32。
1 .非负整数用int表示。 时间的复杂性是logN。
在整数减去1的二进制格式中,1右边的所有数字都为1,最后加上1则生成必须返回的结果。
2 .非负整数用float64表示。 因为浮点数隐式使用log (整数)的结果,所以复杂度为o ) 1。 这个方法有点狡猾。 标题中有整数,但这里使用的是float64,所以不是整数,但想法不同,所以采用了。
浮点数=符号位代码尾数。 如果尾数不为0,则尾数为0,步骤代码为1。 这是要返回的浮点数的存储结果。如果尾数为0,则当前浮点数是要返回的结果。
代码是用谷歌写的。 代码如下。
包主
导入(
' fmt '
' math '
)
func main () }
for i :=1; i=129; i {
fmt.println(I,tablesizefor1(I ),tablesizefor2) float64 ) )
}
}
已知//n是正数
返回大于或等于//且最接近n、有2的乘方的值
functablesizefor1(nint ) int {
n--
n |=n 1
n |=n 2
n |=n 4
n |=n 8
n |=n 16
returntwoselectone (n0,1,n 1 ) )。
}
functwoselectone(conditionbool,a int,b int ) int {
if condition {
返回a
} else {
返回b
}
}
functablesizefor2(afloat64 ) float64 {
_,exp,frac :=从浮动64 (a ) )
if frac!=0 {
exp
frac=0
}
returngetfloat64(0,exp,frac )。
}
//根据浮点数求出编码位、步码、尾数
funcfromfloat64(ffloat64 )、uint64、uint64、uint64 ) {
u:=math.float64bits(f )。
return u 63,u 52 0b 00000111 _ 111111 _ 1111111,u0b 0000000000 _ 000001111 _ 11111111 _ 1111111111 _ 1111111111111111111111111111111111111111111111111111111111111111111111111
}
//根据符号位、阶码、尾数求出浮点数
funcgetfloat64(suint64、exp uint64、frac uint64 ) float64 {
s=s 63
exp=exp 0b00000111_11111111 52
frac
返回矩阵. float 64 from bits (s )。
}
执行结果如下。
***
[左神java代码] 65https://github.com/algorithm Zuo/coding-for-great-offer/blob/main/src/class 01/code 03 _ near