Skip to content

Instantly share code, notes, and snippets.

@andrespch
Created September 8, 2016 12:47
Show Gist options
  • Save andrespch/dd6d5448e81c27d49220338fdaf25e91 to your computer and use it in GitHub Desktop.
Save andrespch/dd6d5448e81c27d49220338fdaf25e91 to your computer and use it in GitHub Desktop.
import Cocoa
struct MyNumber {
private var string:String!
var lenght:Int {
get {
return string.characters.count
}
}
init(string: String) {
self.string = string
}
init(length: Int) {
self.string = String(count: length, repeatedValue: Character(" "))
}
}
extension MyNumber {
func add(number: MyNumber) -> MyNumber {
let maxLength = max(self.lenght, number.lenght)
let lengthDiff = abs(self.lenght - number.lenght)
let zeros = String(count: lengthDiff, repeatedValue: Character(" "))
var s1 = " "
var s2 = " "
if self.lenght > number.lenght {
s1 = self.string
s2 = zeros + number.string
} else {
s1 = number.string
s2 = zeros + self.string
}
var result = String(count: maxLength, repeatedValue: Character(" "))
var rest = 0
s1
s2
for i in (maxLength - 1).stride(through: 0, by: -1) {
let i1 = s1.startIndex.advancedBy(i)
let sum = s1[i1].integerValue + s2[i1].integerValue + rest
rest = sum/10
result.removeAtIndex(i1)
result.insert(String(sum).characters.last!, atIndex: i1)
}
if rest > 0 {
rest
result = String(rest) + result.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
}
return MyNumber(string: result)
}
}
extension Character {
var integerValue:Int {
return Int(String(self)) ?? 0
}
}
let n1 = MyNumber(string: "9999")
let n2 = MyNumber(string: "999")
let r = n1.add(n2)
r.string
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment