题目:实现整数的减法,乘法和除法,只允许使用加法.
减法
减法是加法的另外一种形式,减法通过取反可以变成加法.
<pre><code>` func negate(a:Int) -> Int {
var num:Int = a
var result:Int = 0
let base:Int = num < 0 ? 1 : -1
while num != 0 {
result += base
num += base
}
return result
}
func minus(a:Int,b:Int) -> Int {
return a + negate(a: b)
}`</code></pre>
乘法
乘法是加法的另外的一种形式,数字重复相加的结果就是乘法.
<pre><code>` func multiply(a:Int,b:Int) -> Int {
if a < b {
return multiply(a:b,b:a)
}
var sum:Int = 0
for _ in 0..<abs(a: b) {
sum += a
}
if b < 0 {
sum = negate(a: sum)
}
return sum
}
func abs(a:Int) -> Int {
if a < 0 {
return negate(a:a)
} else {
return a
}
}`</code></pre>
除法
通过加法来实现除法是没法做到保留到小数位,只能保留到整数.
<pre><code>` func divide(a:Int,b:Int) -> Int? {
if b == 0 {
return nil
}
let numA:Int = abs(a: a)
let numB:Int = abs(a: b)
var result:Int = 0
var num:Int = 0
while (numB + num) < numA {
num += numB
result += 1
}
if (a > 0 && b > 0) || (a < 0 && b < 0) {
return result
} else {
return negate(a: result)
}
}`</code></pre>
测试代码:
<pre><code>`var operatorNum:Operator = Operator()
var minusNUm:Int = operatorNum.minus(a: 20, b: 10)
print("FlyElephant---减法结果:(minusNUm)")
var multiNum:Int = operatorNum.multiply(a: 10, b: -4)
print("FlyElephant---乘法结果:(multiNum)")
var divideNum:Int? = operatorNum.divide(a: 10, b: -3)
print("FlyElephant---除法结果:(divideNum!)")`</code></pre>