Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - Multiply Strings - Умножение строкового числа на n
- // по условию num может быть перевернут - младшие разряды расположены по младшему индексу
- func multiply(_ numString: inout String, _ nString: String) {
- var num = Array(numString.reversed()).map{String($0)}
- var n = Int(nString)!
- // длина резулитирующего числа = сумма кол-ва цифр num и n
- var result = Array.init(repeating: 0, count: num.count + 1)
- for i in 0..<num.count {
- let digit = Int(num[i])! * n
- result[i] += digit % 10
- result[i + 1] += digit / 10
- }
- // если будет такая ситуация что число получилось меньше чем 4 знака
- // то впереди будет 0 так как мы таким создали массив
- // 0100
- result = result.reversed()
- var begin = 0
- while begin < result.count && result[begin] == 0 {
- begin += 1
- }
- num = Array(result[begin..<result.count]).map{String($0)}
- numString = num.joined()
- }
- var str = "999"
- multiply(&str, "9")
- print(str)
- // усложненная версия
- def multiply(num1: str, num2: str) -> str:
- if "0" in [num1, num2]:
- return "0"
- res = [0] * (len(num1) + len(num2))
- num1, num2 = num1[::-1], num2[::-1]
- for i1 in range(len(num1)):
- for i2 in range(len(num2)):
- digit = int(num1[i1]) * int(num2[i2])
- res[i1 + i2] += digit
- res[i1 + i2 + 1] += res[i1 + i2] // 10
- res[i1 + i2] = res[i1 + i2] % 10
- res, beg = res[:: -1], 0
- while beg < len(res) and res[beg] == 0:
- beg += 1
- res = map(str, res[beg:])
- return ''.join(res)
- print(multiply("408", "5"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement