使用go求幂的几种方法小结

我就废话不多说了,大家还是直接看代码吧~

/*
*  二分幂法 求x^n
 */
// 求整数幂
package main
import (
  "fmt"
  "math"
)
func main() {
  var x float64
  var n int
  fmt.Scanf("%f%d", &x, &n)
  fmt.Println(powerf(x, n))
  fmt.Println(powerf2(x, n))
  fmt.Println(powerf3(x, n))
  fmt.Println(math.Pow(x, float64(n)))
}
func powerf(x float64, n int) float64 {
  ans := 1.0
  for n != 0 {
    if n%2 == 1 {
      ans *= x
    }
    x *= x
    n /= 2
  }
  return ans
}
/*
*  递归法 求x^n
 */
func powerf2(x float64, n int) float64 {
  if n == 0 {
    return 1
  } else {
    return x * powerf2(x, n-1)
  }
}
/*
*  循环法 求x^n
 */
func powerf3(x float64, n int) float64 {
  ans := 1.0
  for n != 0 {
    ans *= x
    n--
  }
  return ans
}

测试案例:

补充:Go常见运算操作

1、算术运算符

// 运算符 描述 实例

// + 相加 A + B 输出结果 30

// - 相减 A - B 输出结果 -10

// * 相乘 A * B 输出结果 200

// / 相除 B / A 输出结果 2

// % 求余 B % A 输出结果 0

// ++ 自增 A++ 输出结果 11

// -- 自减 A-- 输出结果 9

2、关系运算符

// 运算符 描述 实例

// == 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False

// != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True

// > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为 False

// < 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为 True

// >= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为 False

// <= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为 True

3、逻辑运算符

// 运算符 描述 实例

// && 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False

// || 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 (A || B) 为 True

// ! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True

4、赋值运算符

// i++ 自增

// i-- 自减

// i+=j 等价于 i = i + j

5、代码

package main
import "fmt"
func main() {
var a,b = 10,11
fmt.Printf("a+b=%d\n",a+b)
fmt.Printf("a-b=%d\n",a-b)
fmt.Printf("a*b=%d\n",a*b)
fmt.Printf("a/b=%d\n",a/b)
fmt.Printf("a求余b=%d\n",a%b)
var c,d=10,9
println("a>b的结果",c>d)
println("a==b的结果",c==d)
println("a<b的结果",c<d)
println("a!=b的结果",c!=d)
var e,f = true,false
println(e&&f)
println(e||f)
println(!f)
var i,j = 1,0
i++
fmt.Println(i)
i--
fmt.Println(i)
j += i // 等价于 j = j+i
fmt.Println(j)
i++
j *= i
fmt.Println(j)
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Golang 运算符及位运算详解

    什么是运算符? 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是"+". 在vb2005中运算符大致可以分为5种类型:算术运算符.位运算符. 关系运算符.赋值运算符.逻辑运算符. 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符. func main() { a, b := 3,4 fmt.Printf("a 加 b

  • 浅谈Go语言中的次方用法

    Go语言中符号 " ^ " 不再用于次方,而是表示"按位异或的运算" 具体的运算规则如下: 按位异或 ^ : 两位一个为 0, 一个为 1 ,结果为 1 ,否则为 0(位表示二进制的机器码) 例子如下: 所以Go语言中2^3 = 1 不是 8(注意:计算机都是按照补码进行运算) 那么Go语言中的次方是什么:(下图所示) (官方文档是个好帮手) 补充:leetcode golang实现一个数的整数次方 pow(x, n) 我就废话不多说了,大家还是直接看代码吧~ pa

  • golang切片反序实例

    看代码吧~ package main import ( "fmt" ) func main() { fmt.Println(reverse([]byte{11,22,33,44})) } func reverse(s []byte) []byte { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i] } return s } 补充:golang切片内存应用技巧 在 Go 语言中切片是

  • golang指数运算操作

    我就废话不多说了,大家还是直接看代码吧~ func main() { fmt.Println(exponent (5,3)) } //a的n次方 //超出uint64的部分会丢失 func exponent (a,n uint64) uint64 { result := uint64(1) for i := n ; i > 0; i >>= 1 { if i&1 != 0 { result *= a } a *= a } return result } 补充:Golang 位运算

  • Go语言实现牛顿法求平方根函数的案例

    牛顿法求平方根 原理 计算机常用循环来计算F的平方根.从某个猜测的x值开始,根据x^2与F的近似度来调整x,产生一个更好的猜测: x -= (x * x - F) / (2 * x) 重复调整过程,猜测的结果会越来越精确,得到的答案越发的趋近实际的平方根. 我们可以设定精度,控制计算结果与实际结果的偏差. 实现 package main import ( "fmt" "math" ) func Sqrt(F float64) float64 { x := 1.0 f

  • 使用go求幂的几种方法小结

    我就废话不多说了,大家还是直接看代码吧~ /* * 二分幂法 求x^n */ // 求整数幂 package main import ( "fmt" "math" ) func main() { var x float64 var n int fmt.Scanf("%f%d", &x, &n) fmt.Println(powerf(x, n)) fmt.Println(powerf2(x, n)) fmt.Println(powe

  • python求绝对值的三种方法小结

    如下所示: 1.条件判断 2.内置函数abs() 3.内置模块 math.fabs abs() 与fabs()的区别 abs()是一个内置函数,而fabs()在math模块中定义的. fabs()函数只适用于float和integer类型,而abs()也适用于复数. abs()返回是float和int类型,math.fabs()返回是float类型 以上这篇python求绝对值的三种方法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Java中求最大值的4种方法实例代码

    前言 本文主要给大家分享了关于java求最大值的4中方法,文中给出了完整的示例代码,下面话不多少了,来一起看看吧 示例代码: /** *@author Prannt *求最大值(或最小值) *本例以int数据类型为例,可指定其他数据类型 */ //方法一:直接法,求最小值类似 public class Deno05ArrayMax { public static void main(String[] args) { //数据类型可指定 int [] array = {5,15,20,30,100

  • Python实现矩阵相乘的三种方法小结

    问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727∗27, 28∗2828∗28, 29∗2929∗29时的运行时间与MATLAB自带的矩阵相乘的运行时间,绘制时间对比图. 解题方法 本文采用了以下方法进行求值:矩阵计算法.定义法.分治法和Strassen方法.这里我们使用Matlab以及Python对这个问题进行处理,比较两种语言在一样的条件下,

  • js中将多个语句写成一个语句的两种方法小结

    Javascript 中将多个语句写成一个语句的两种方法小结一.使用逗号运算符将多个语句写成一个语句  1.一次声明多个变量  var i=1,j=1,k=1  2.多个语句用逗号间隔  i=1,j=i+2,k=j+2  二.使用花括号将多个语句写成一个语句  if语句.while语句.do/while语句.for语句.for/in语句和function语句等语句后都只能跟随一个子语句,此时可以用{和}将多条语句围起来变成一个语句.  复制代码 代码如下: if(username==null) 

  • jquery的ajax提交form表单的两种方法小结(推荐)

    jquery的ajax提交form表单的两种方法小结(推荐) 方法一: function AddHandlingFeeToRefund() { var AjaxURL= "../OrderManagement/AjaxModifyOrderService.aspx"; alert($('#formAddHandlingFee').serialize()); $.ajax({ type: "POST", dataType: "html", url:

  • 遍历json获得数据的几种方法小结

    Json在Web开发的用处非常广泛,作为数据传递的载体,如何解析Json返回的数据是非常常用的.下面介绍下四种解析Json的方式: Part 1 var list1 = [1,3,4]; alert(list1[1]); var list2 = [{"name":"leamiko","xing":"lin"}]; alert(list2[0]["xing"]) alert(list2[0].xing) Pa

  • js实现页面跳转的几种方法小结

    按钮式: <INPUT name="pclog" type="button" value="GO" onClick="location.href='http://www.jb51.net/'"> 链接式: <a href="javascript:history.go(-1)">返回上一步</a> <a href="<%=Request.ServerV

  • 关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必须要知道集合中的对象,那个在前那个在后.因此,学会如何定义比较方法是非常重要的. C++模板库的许多容器需要相关类型有序,例如set<T> 和priority_queue<T>. 这篇文章旨在告诉大家如何为一个类定义一个排序方法,以便在STL容器或者方法中使用. 作为一个C++程序员,

  • Spring整合Struts2的两种方法小结

    spring提供了一个ContextLoaderListener,该监听类实现了ServletContextListener接口.该类可以作为Listener使用,它会在创建时自动查找WEB-INF/下的applicationContext.xml文件,因此如果只有一个配置文件且配置文件命名为applicationContext.xml,则只需在web.xml文件中增加如下配置片段: <!-- 使用ContextLoaderListener初始化Spring容器 --> <listene

随机推荐