Skip to main content

Command Palette

Search for a command to run...

Adding very long integers with brightScript

Updated
1 min read

function longAdd( a$, b$ ) as string
    result$ = ""
    carry = 0

    a$ = a$.trim()
    b$ = b$.trim()

    ' Guess longest
    diff = abs( b$.len() - a$.len() )
    longest = a$.len()

    ' is it longest
    if b$.len() > longest then
        longest = b$.len()
        a$ = zeroPadLeft(a$, diff)
    else
        b$ = zeroPadLeft(b$, diff)
    end if

    ' print "@longAdd() a, b: >"; a$ + "< >" + b$ + "< ", carry

    for i = longest - 1 to 0 step -1

        ai = val( a$.mid(i,1) )
        bi = val( b$.mid(i,1) )

        sumi$ = str( ai + bi + carry ).trim()

        if sumi$.len() = 1
            ' print "single digit: "; ai, bi, sumi$
            result$ = sumi$.mid(0,1) + result$
            carry = 0
        else
            ' print "Two digits: "; ai, bi, sumi$
            result$ = sumi$.mid(1,1) + result$
            carry = val( sumi$.mid(0,1) )
        end if

        ' print "Result: "; result$
        ' print "Carry: "; carry

    end for

    if carry > 0 result$ = str(carry) + result$

    return result$ 

end function


function zeroPadLeft( str$, pads ) as string
    if pads < 1 then return str$ ' do nothing
    for i = 1 to pads
        str$ = "0" + str$.trim()
    end for
    return str$.trim()
end function