Advertisement
Alexxik

Untitled

Mar 18th, 2024
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.86 KB | None | 0 0
  1. // MARK: - Multiply Strings - Умножение строкового числа на n
  2.  
  3. // по условию num может быть перевернут - младшие разряды расположены по младшему индексу
  4.  
  5. func multiply(_ numString: inout String, _ nString: String) {
  6.     var num = Array(numString.reversed()).map{String($0)}
  7.     var n = Int(nString)!
  8.     // длина резулитирующего числа = сумма кол-ва цифр num и n
  9.     var result = Array.init(repeating: 0, count: num.count + 1)
  10.    
  11.     for i in 0..<num.count {
  12.         let digit = Int(num[i])! * n
  13.         result[i] += digit % 10
  14.         result[i + 1] += digit / 10
  15.     }
  16.     // если будет такая ситуация что число получилось меньше чем 4 знака
  17.     // то впереди будет 0 так как мы таким создали массив
  18.     // 0100
  19.     result = result.reversed()
  20.     var begin = 0
  21.     while begin < result.count && result[begin] == 0 {
  22.         begin += 1
  23.     }
  24.     num = Array(result[begin..<result.count]).map{String($0)}
  25.     numString = num.joined()
  26. }
  27.  
  28. var str = "999"
  29. multiply(&str, "9")
  30. print(str)
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. // усложненная версия
  38.  
  39. def multiply(num1: str, num2: str) -> str:
  40.     if "0" in [num1, num2]:
  41.         return "0"
  42.     res = [0] * (len(num1) + len(num2))
  43.     num1, num2 = num1[::-1], num2[::-1]
  44.     for i1 in range(len(num1)):
  45.         for i2 in range(len(num2)):
  46.             digit = int(num1[i1]) * int(num2[i2])
  47.             res[i1 + i2] += digit
  48.             res[i1 + i2 + 1] += res[i1 + i2] // 10
  49.             res[i1 + i2] = res[i1 + i2] % 10
  50.     res, beg = res[:: -1], 0
  51.     while beg < len(res) and res[beg] == 0:
  52.         beg += 1
  53.     res = map(str, res[beg:])
  54.     return ''.join(res)
  55. print(multiply("408", "5"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement