Advertisement
HXXXXJ

Add Two double string

Mar 23rd, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.92 KB | None | 0 0
  1.  
  2.  
  3. //split string to two part
  4. func splitNumber(_ str: String) -> (String, String){
  5.     let arr = Array(str)
  6.     if let indexDot = arr.firstIndex(of: "."){
  7.         return (String(arr[0 ..< indexDot]), String(arr[indexDot + 1 ..< str.count]))
  8.     }
  9.     return (str, "")
  10. }
  11.  
  12. //add two valid double string
  13. func addDoubleString(_ str1: String, _ str2: String) -> String{
  14.     let pair1 = splitNumber(str1)
  15.     let pair2 = splitNumber(str2)
  16.     let decimalResult = addDecimal(pair1.1, pair2.1)
  17.     return addInteger(pair1.0, pair2.0, decimalResult.1) + decimalResult.0
  18. }
  19.  
  20. //this function add two decimal string and return the int carry over part
  21. func addDecimal(_ str1 : String, _ str2: String) -> (String , Int){
  22.     var st1 = str1
  23.     var st2 = str2
  24.     while st1.count != st2.count{
  25.         if str1.count > str2.count {st2.append("0")}
  26.         if str2.count > str1.count {st1.append("0")}
  27.     }
  28.  
  29.     let decimalRes = addString(st1, st2, 0)
  30.     return (decimalRes.0.count > 0 ? "." + decimalRes.0 : "", decimalRes.1)
  31. }
  32.  
  33. //this function add two integer with carry
  34. func addInteger(_ str1 : String, _ str2: String, _ inputCarry :Int) -> String{
  35.     let res = addString(str1, str2, inputCarry)
  36.     return (res.1 > 0 ? String(res.1) : "") + res.0
  37. }
  38.  
  39.  
  40. //this function add two integer number and return carry
  41. func addString(_ str1 : String, _ str2: String, _ inputCarry :Int) -> (String , Int){ // res and carry
  42.     let arr1 = Array(str1)
  43.     let arr2 = Array(str2)
  44.     var p1 = arr1.count - 1
  45.     var p2 = arr2.count - 1
  46.     var res = ""
  47.     var carry = inputCarry
  48.     while p1 >= 0 || p2 >= 0 {
  49.         let int1 = (p1 >= 0 ? Int(String(arr1[p1]))! : 0 )
  50.         let int2 = (p2 >= 0 ? Int(String(arr2[p2]))! : 0)
  51.         let sum = int1 + int2 + carry
  52.         res = String(sum % 10) + res
  53.         carry = sum / 10
  54.         p1 -= 1
  55.         p2 -= 1
  56.     }
  57.     return (res , carry)
  58. }
  59.  
  60.  
  61.  
  62. print(addDoubleString("1.5", "2.50"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement