Pow(x, n)
[题目]
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
[输入1]
代码语言:javascript复制2.00000, 10
[返回1]
代码语言:javascript复制1024.00000
[输入2]
代码语言:javascript复制2.10000, 3
[返回2]
代码语言:javascript复制9.26100
[输入3]
代码语言:javascript复制2.00000, -2
[返回3]
代码语言:javascript复制0.25000
[解法]
无
[代码实现]
代码语言:javascript复制package main
import "fmt"
func main() {
input := float64(2.1)
result := computeResult(input, 3)
fmt.Println("result:", result)
}
func computeResult(target float64, num int) float64 {
if num < 0 {
num = num * (-1)
target = 1 / target
}
result := float64(1)
for i := 0; i < num; i {
result = result * target
}
return result
}
x 的平方根
[题目]
实现 int sqrt(int x) 函数。
[输入1]
代码语言:javascript复制4
[返回1]
代码语言:javascript复制2
[输入2]
代码语言:javascript复制8
[返回2]
代码语言:javascript复制2
说明:8的平方根是2.82842...,由于返回类型是整数,小数部分将被舍去。
[解法]
使用二分查找,需要注意的是因为只保留整数部分,我们找到平方根的平方结果只可能小于target,基于以上的分析,在二分查找的时候,在缩小范围的时候,要是结果小于target都进行缓存,这样保证有结果
[代码实现]
代码语言:javascript复制package main
import "fmt"
func main() {
input := 8
result := computeResult(input)
fmt.Println("result:", result)
}
func computeResult(input int) int {
left, right := 0, input
result := 1
for left <= right {
mid := (left right) / 2
if mid * mid > input {
right = mid - 1
} else {
result = mid
left = mid 1
}
}
return result
}
两数相除
[题目]
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
[输入]
代码语言:javascript复制dividend = 10, divisor = 3
[返回]
代码语言:javascript复制3
[解法]
使用二分查找,举例说明,被除数10和除数3,那么从1开始尝试有几个3可以组成最靠近10的数字。
[代码实现]
代码语言:javascript复制package main
import "fmt"
func main() {
input := 10
num := 3
result := computeResult(input, num)
fmt.Println("result:", result)
}
// 使用二分查找计算
func computeResult(input int, num int) int {
left := 0
right := input
result := 0
for left <= right {
mid := (left right) / 2
resItem := _compute(mid, num)
if input < resItem {
right = mid - 1
} else {
result = mid
left = mid 1
}
}
return result
}
func _compute(item int, num int) int {
result := 0
for i := 0; i < num; i {
result = item
}
return result
}
分数到小数
[题目]
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
[输入1]
代码语言:javascript复制numerator = 1, denominator = 2
[返回1]
代码语言:javascript复制"0.5"
[输入2]
代码语言:javascript复制numerator = 2, denominator = 1
[返回2]
代码语言:javascript复制"2"
[输入3]
代码语言:javascript复制numerator = 2, denominator = 3
[返回3]
代码语言:javascript复制"0.(6)"
[解法]
无
[代码实现]
代码语言:javascript复制package main
import (
"fmt"
"strconv"
)
func main() {
input := 2
num := 3
result := computeResult(input, num)
fmt.Println("result:", result)
}
func computeResult(input int, num int) string {
temp := input % num
result := strconv.Itoa(input / num)
if temp == 0 {
return result
}
result = "."
filter := map[int]int{}
for temp != 0 {
if pos, exists := filter[temp]; exists {
result = insert(result, pos, "(")
result = ")"
return result
}
filter[temp] = len(result)
temp = temp * 10
result = strconv.Itoa(temp / num)
temp = temp % num
}
return result
}
func insert(input string, pos int, letter string) string {
return input[:pos] letter input[pos:]
}