剑指 Offer :001整数除法
题目描述:
给定两个整数 a
和 b
,求它们的除法的商 a/b
,要求不得使用乘号 '*'
、除号 '/'
以及求余符号 '%'
。
注意:
- 整数除法的结果应当截去(
truncate
)其小数部分,例如:truncate(8.345) = 8
以及truncate(-2.7335) = -2
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是
[−231, 231−1]
。本题中,如果除法结果溢出,则返回231 − 1
示例 1:
输入:a = 15, b = 2 输出:7 解释:15/2 = truncate(7.5) = 7
示例 2:
输入:a = 7, b = -3 输出:-2 解释:7/-3 = truncate(-2.33333..) = -2
示例 3:
输入:a = 0, b = 1 输出:0
示例 4:
输入:a = 1, b = 1 输出:1
提示:
-231 <= a, b <= 231 - 1
b != 0
package main
import (
"fmt"
)
func divide (a int, b int) int {
// 看考虑加法代替乘法和除法
// 定义变量 i 来接收两个整数的商
// 利用 多次减法来代替除法,每一次减法 i 都 +1
// 通过比较 a 与 b 的大小来了解,a 是否与 b 除尽
// 此情况是 a > b 的时候;a 是被除数,b 是除数
var i int = 0
// 判断 a b 是否都大于0
// 正数的商
if a >= 0 && b > 0 {
for ; a >= b; {
i++
a -= b
}
// return i
// 存在负数的商计算
} else if a*b < 0 {
b = -b
for ; a >= b; {
i++
a -= b
}
i = -i
// return -i
// 两者都是负数的商计算
} else if a < 0 && b < 0{
a = -a
b = -b
for ; a >= b; {
i++
a -= b
}
}
// 输出两个整数的商
return i
}
func main() {
// 定义两个变量 被除数dividend 除数divisor
var dividend, divisor int
// 提示:请输出被除数和除数
fmt.Println("请输入被除数和除数,除数不能为 0,用空格隔开")
// 获取用户输入的被除数和除数
fmt.Scanln(÷nd,&divisor)
// 输出这两个整数的商
fmt.Println("这两个整数的商是:")
fmt.Println(dividend,"/",divisor,"=",divide(dividend,divisor))
}