This handler will substract what AppleScript doesn’t, but it will work only for positive numbers.
To make it work, you must provide a list of strings (numbers), without any limitation in its number of digits. You must do it in order (the bigger, the first).
OS version: OS X
substractIntegersByHand({"9876543534546432109876543210", "5654", "98765432109876543210"})
to substractIntegersByHand(string_list)
--> reverse items to form columns
repeat with i from 1 to string_list's length
set string_list's item i to (reverse of (string_list's item i)'s items as text)
end repeat
set final_result to {}
set current_digit to 1
set the_rest to 0
repeat
try
--> get column of current digit
set digit_list to {}
repeat with i in string_list
try
set end of digit_list to (i's item current_digit as integer)
end try
end repeat
if digit_list = {} then exit repeat
--> sum rest + all digits, except for the first one
set partial_result to 0
repeat with i from 1 to count digit_list
if i = 1 then -- es el primero
set partial_result to the_rest
else
set partial_result to partial_result + (digit_list's item i)
end if
end repeat
set partial_last_digit to item -1 of (partial_result as text) as integer
set partial_firsts_digits to (reverse of (rest of (reverse of (items of (partial_result as text)))) as text)
set bigger_ten to (partial_firsts_digits & digit_list's item 1) as integer
if bigger_ten < partial_result then set bigger_ten to bigger_ten + 10
set beginning of final_result to bigger_ten - partial_result
set the_rest to bigger_ten div 10
set current_digit to current_digit + 1
on error msg
exit repeat
end try
end repeat
try
repeat while item 1 of final_result is 0
set final_result to rest of final_result
end repeat
on error
set final_result to 0
end try
return final_result as text
end substractIntegersByHand