Hey man, whipped up a function for this. It's not as efficient as it could be, but, it works, that's whats important. Your only limit on digits, is the length of a string, which is...er....very long? :o)
; Add large number example
; By Ross C
Graphics 800,600
Global first_number$
Global second_number$
first_number = Input(" Enter the first number: ")
second_number = Input(" Enter the second number: ")
DebugLog(" first string = "+first_number)
Print " Equals:" + AddLarge$(first_number,second_number)
WaitKey()
End
Function AddLarge$(n1$,n2$)
Local answer$ = ""
Local temp_string$ = ""
Local holder$ = ""
Local temp_total% = 0
Local a1%
Local a2%
Local carry% = 0
Local templarge$
Local tempsmall$
If Len(n1) => Len(n2) Then ; get which number has the largest length
templarge = n1 ; then set it to "templarge" for the longest string and "tempsmall" for the smallest one
tempsmall = n2
Else
templarge = n2
tempsmall = n1
End If
For loop = 0 To Len(templarge)-1; set up a loop which will loop through all the characters of the longest string "templarge"
a1 = Mid$( templarge,Len(templarge)-loop,1) ; set a INT "a1" to the digit of the longest loop
If Len(tempsmall) > loop Then ; if the smallest string is long enough, then set INT "a2" to the "loop" digit from the right
a2 = Mid$( tempsmall,Len(tempsmall)-loop,1)
Else
a2 = 0 ; else just make it zero to fit the calculation
End If
temp_total = a1 + a2 + carry ; perform the calculation, taking into account the carry from a prevoius loops calculation
If a1 + a2 > 9 Then
carry = 1 ; set the carry to 1 if the calculation for the two digits is greater than 9 (the highest single digit)
Else
carry = 0 ; else set it to zero
End If
If loop > 0 Then ; make sure the loop is greater than 0 before putting the contents of the temp_string into the holder string
holder = temp_string ; used to hold the contents of the temp_string. Basically so you can insert a digit at the beginning
; of the temp_string variable. Copy to holder, set temp_string to the digit, then add the holder string back on :o)
End If
temp_string = Str(Right$(temp_total, 1)) ; set the temp_string to the rightmost digit in temp_total. This eliminates adidng calculation that went over 9
temp_string = temp_string+holder ; add the holder string back on, to make up the answer so far
answer = temp_string ; make the answer string equal temp string so far. Could get away with just using temp_string, but i didn't think of that :o)
Next
Return answer$ ; return the answer back across
End Function