99 - 100 = -1
9 - 1 = 8
1 - 9 = -8
9 - 9 = 0
90 - 90 = 0
subtract(s1, s2):
// flip if s2 > s1
if is-greater(s2, s1):
buffer = subtract(s2, s1)
buffer.insert(0, "-")
return buffer
// s1 - s2
i = s1.length-1, j = s2.length-1
carry = 0
buffer = new
while i >= 0: // i >= j always
a, b = 0
if i >= 0:
a = s1[i] - '0'
i--
if j >= 0:
b = s2[j] - '0'
j--
sum = a-b -carry
if sum < 0:
sum += 10
carry = 1
else:
carry = 0
buffer.append(sum)
// remove leading 0s except last
i = buffer.length-1
while i > 0 && buffer[i] == '0':
buffer.length--
i--
// carry will always be 0 as s1 >= s2
return buffer.reverse()
// clean numbers only (+ve, no spaces, no padded, etc.)
is-greater(a, b):
result = a.length() > b.length()
if a.length() == b.length():
for i = 0, i < a.length(), i++:
if a[i] > b[i]:
result = true
break
return result
compare(sa, sb):
c = sa.length().compare(sb.length())
if c != 0:
return c
for i = 0, i < sa.length(), i++:
c = sa[i].compare(sb[i])
if c != 0:
return c
return 0
No comments:
Post a Comment