算法39-快速求次幂运算
生活随笔
收集整理的這篇文章主要介紹了
算法39-快速求次幂运算
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
如10^20,求少于20次乘法的算法求出次冪
分析:
常規(guī)求次冪,多少次冪就要乘以多少次,想要降低時(shí)間復(fù)雜度,根據(jù)次冪的乘法運(yùn)算,可以將指數(shù)拆分
代碼:
package mainimport ("fmt""math""strconv")//計(jì)算a的n次方,只支持整型 func pow(a,n int) {//轉(zhuǎn)成2進(jìn)制num2 := strconv.FormatInt(int64(n), 2)t:=0result:=1//倒敘循環(huán)for i:=len(num2)-1;i>=0;i--{//t從2的0次冪遞增,1,2,4,8,次冪t=int(math.Pow(float64(a),math.Pow(2,float64(len(num2)-i)-1)))//倒敘循環(huán)到有值,rusult將t乘進(jìn)去if string(num2[i])=="1"{result=result*t}}fmt.Println(result) }// //計(jì)算a的n次方,a可以是浮點(diǎn) // func pow1(a float64, n int)float64 { // //a若是浮點(diǎn)數(shù),不用轉(zhuǎn)換類型 // //n若是負(fù)數(shù),先求n的絕對(duì)值,最后結(jié)果去除以1 // //n若是int的最小值,它是沒(méi)有絕對(duì)值的 需要加上1再求絕對(duì)值 // // // if n==0{ // return 1.0 // } // //轉(zhuǎn)成2進(jìn)制 // t:=0.0 // result:=1.0 // tmp:=0 // if n==math.MinInt8 || n==math.MinInt16 || n==math.MinInt32 || n==math.MinInt64{ // tmp=int(math.Abs(float64(n)+1)) // }else{ // tmp=n // } // num2 := strconv.FormatInt(int64(tmp), 2)// // pow:=math.Abs() // //倒敘循環(huán) // for i:=len(num2)-1;i>=0;i--{ // //t從2的0次冪遞增,1,2,4,8,次冪 // t=math.Pow(a,math.Pow(2,float64(len(num2)-i)-1)) // //倒敘循環(huán)到有值,rusult將t乘進(jìn)去 // if string(num2[i])=="1"{ // result=result*t // } // } // if n==math.MinInt8 || n==math.MinInt16 || n==math.MinInt32 || n==math.MinInt64{ // result=result*a // } // if n<0{//n若是負(fù)數(shù),先求n的絕對(duì)值,最后結(jié)果去除以1 // return 1/result // } // fmt.Println(result) // return result // }//計(jì)算a的n次方,a可以是浮點(diǎn) func pow2(a float64, n int)float64 {//a若是浮點(diǎn)數(shù),不用轉(zhuǎn)換類型//n若是負(fù)數(shù),先求n的絕對(duì)值,最后結(jié)果去除以1//if n==0{return 1.0}//轉(zhuǎn)成2進(jìn)制t:=0.0result:=1.0// tmp:=0tmp:=int(math.Abs(float64(n)))num2 := strconv.FormatInt(int64(tmp), 2)// pow:=math.Abs()//倒敘循環(huán)for i:=len(num2)-1;i>=0;i--{//t從2的0次冪遞增,1,2,4,8,次冪t=math.Pow(a,math.Pow(2,float64(len(num2)-i)-1))//倒敘循環(huán)到有值,rusult將t乘進(jìn)去if string(num2[i])=="1"{result=result*t}}if n<0{//n若是負(fù)數(shù),先求n的絕對(duì)值,最后結(jié)果去除以1return 1/result}fmt.Println(result)return result } func main(){fmt.Println(pow2(2.4,-127)) }總結(jié)
以上是生活随笔為你收集整理的算法39-快速求次幂运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 单自由度体系对简谐荷载的反应
- 下一篇: 2022-2028年全球与中国汽车自动变