首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >golang运算符%未在float64上定义

golang运算符%未在float64上定义
EN

Stack Overflow用户
提问于 2020-07-05 13:20:44
回答 2查看 3.4K关注 0票数 2

有一个带有java的数学方法的leetcode测试326。三次幂

代码语言:javascript
运行
复制
public class Solution {
    public boolean isPowerOfThree(int n) {
        return (Math.log(n) / Math.log(3) + epsilon) % 1 <= 2 * epsilon;
    }
}

当我打算将这个解决方案转换为Golang时,就像

代码语言:javascript
运行
复制
import "math"

func isPowerOfThree(n int) bool {
    return (math.Log10(float64(n)) / math.Log10(3)) % 1 == 0.0 
}

然后出现编译错误,如下所示

代码语言:javascript
运行
复制
Line 4: Char 53: invalid operation: math.Log10(float64(n)) / math.Log10(3) % 1 (operator % not defined on float64) (solution.go)

我检查了数学包,但是没有像%操作符那样的受支持的函数,在Golang中有像%这样的有效运算符吗?非常感谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-05 14:11:31

TLDR:_, frac := math.Modf(f)

您可以在func Mod(x, y float64) float64包中使用math

代码语言:javascript
运行
复制
package main

import (
    "math"
)

func isPowerOfThree(n int) bool {
    return math.Mod((math.Log10(float64(n)) / math.Log10(3)), 1.0) == 0.0 
}

您也可以使用func Modf(f float64) (int float64, frac float64)

代码语言:javascript
运行
复制
package main

import (
    "math"
)

func isPowerOfThree(n int) bool {
    _, frac := math.Modf((math.Log10(float64(n)) / math.Log10(3)))
    return frac == 0.0
}
票数 7
EN

Stack Overflow用户

发布于 2022-08-24 19:27:11

我们不能使用下面的函数,因为在frac中,十进制后可以有一个以上的数字。

代码语言:javascript
运行
复制
_, frac := math.Modf((math.Log10(float64(n)) / math.Log10(3)))
return frac == 0.0

因此,要解决这个问题,请使用下面的逻辑

代码语言:javascript
运行
复制
func isPowerOfThree(n int) bool { 
   quo,_ := math.Modf((math.Log10(float64(n)) / math.Log10(3))) 
   return n == int(math.Pow(3, quo)) 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62741233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档