我已经实现了一个简单的函数,当除数是 10
的幂时,它返回商和余数:
func getQuotientAndRemainder(num int64, digits uint) (int64, int64) {
divisor := int64(math.Pow(10, float64(digits)))
if num >= divisor {
return num / divisor, num % divisor
} else {
return 0, num
}
}
只是好奇,除了直接使用 /
和 %
运算符,是否有更好的算法来获得商和余数?或者仅在除数是 10
的幂的情况下?
2 回答
“算法”是合理的,可以说是最好的方式:表达 . 如果有的话,这部分代码可能过于复杂:
转换为
float64
可以说是次优的 . 此外,任何大于18的幂的10将溢出int64
. 我建议你添加一个完整性检查并用乘法循环替换代码并测量其性能 .但那么:如果你关心性能,那就在装配中实现它 .
显然,你应该运行一些Go基准:Benchmarks, Package testing .
您的解决方案看起来效率不高 . 试试这个:
输出:
基准测试: