当前位置: 首页 > 面试题库 >

如何在Go中使用大整数?

文增
2023-03-14
问题内容

我需要在Go中对int64的较大值执行运算,例如求幂和除法,但是我遇到了溢出问题。我尝试将它们转换为float64,但随后遇到其他问题。这是我尝试过的。

我有一个整数变量,必须将其转换为float64才能使用方便的数学包(https://golang.org/pkg/math)。

但是,如果整数变量太大,则无法正确转换。我假设这是因为大小大于float64。例如:

fmt.Printf("%f",float64(111111111111111110)) //Outputs 111111111111111104.000000

我正在尝试使用math.Mod,math.Pow10和math.Log10。我如何能够执行以下逻辑,但是上面显示了很多逻辑?

int(math.Mod(float64(123) / math.Pow10(1),10))) // Gets the second digit

问题答案:

这个问题对我来说不是很清楚,但是我假设您想对大整数执行操作,并且仅尝试使用float64。

在这种情况下,正确的工具是math / big
package
。这是如何使用它来提取int64的第n个十进制数字:

// first digit is n=0
func nthDigit(i int64, n int64) int64 {
    var quotient big.Int
    quotient.Exp(big.NewInt(10), big.NewInt(n), nil)

    bigI := big.NewInt(i)
    bigI.Div(bigI, &quotient)

    var result big.Int
    result.Mod(bigI, big.NewInt(10))

    return result.Int64()
}


 类似资料:
  • 问题内容: 我来自C ++背景,并且习惯于使用此类的东西。假设我想要这些的动态数组: 这样做的标准方法是什么? 摘要非常有用 问题答案: 使用内置 例: 有关附加的更多信息,请参考规范。

  • 我在Windows计算机上使用代码块和GNU编译器。当编译器运行时,它会在以下条件下运行: 我的代码如下: 我对此代码的输出: 引用 LONG LONG 整数的行被注释掉,因为编译器给出了错误: 然而,在键入代码时,CodeBlocks提供了代码提示,表明我实际上可以使用LONG_LONG常量。因此,我需要以下问题的答案: < li >为什么整数和长整数具有相同的限制?长整数不应该有更大的取值范围

  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将

  • 问题内容: 尝试使用Go的http包时,我无法确定的语法。尽管我尝试了其他一些被编译器拒绝的其他事情,但这里只有我标记的以下内容是我必须编译的。 该URL可以,因为可以正常使用,但是在我运行时,它只是一个空字符串,并且始终为零。我需要怎么做才能取出数据?编译器拒绝了其他尝试。 输出看起来像这样: 问题答案: 尝试给切片buf设置一个大小,例如 读取器最多读取给定缓冲区的len()。 来自io.go

  • 问题内容: 我正在使用Vector类型存储字节数组(可变大小) 一切正常,但是当我尝试检索值时,编译器告诉我我需要使用类型断言。所以我添加了这些,然后尝试 但是当我运行它时,它会失败: 是否知道如何从Vector用于存储其数据的空Element接口中“投射” /转换为实际的[] byte数组,然后供以后使用? 更新(Go1): 矢量软件包已于2011-10-18删除。 问题答案: 这对我来说很好。

  • 本文向大家介绍如何在Java中调整数组大小?,包括了如何在Java中调整数组大小?的使用技巧和注意事项,需要的朋友参考一下 数组无法在Java中动态调整大小。  一种方法是使用java.util.ArrayList(或java.util.Vector)代替本机数组。 另一种方法是重新分配大小不同的数组,然后将旧数组的内容复制到新数组。 例: 输出: