82 lines
2.1 KiB
Plaintext
82 lines
2.1 KiB
Plaintext
/* NetRexx */
|
|
options replace format comments java crossref symbols nobinary
|
|
|
|
numeric digits 100
|
|
|
|
runSample(arg)
|
|
return
|
|
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
method multiply(multiplier, multiplicand) public static
|
|
result = ''
|
|
mpa = s2a(multiplier)
|
|
mpb = s2a(multiplicand)
|
|
r_ = 0
|
|
rim = 1
|
|
loop bi = 1 to mpb[0]
|
|
loop ai = 1 to mpa[0]
|
|
ri = ai + bi -1
|
|
p_ = mpa[ai] * mpb[bi]
|
|
loop i_ = ri by 1 until p_ = 0
|
|
s_ = r_[i_] + p_
|
|
r_[i_] = s_ // 10
|
|
p_ = s_ % 10
|
|
end i_
|
|
rim = rim.max(i_)
|
|
end ai
|
|
end bi
|
|
r_[0] = rim
|
|
result = a2s(r_)
|
|
result = result.strip('l', 0)
|
|
if result = '' then result = 0
|
|
return result
|
|
|
|
-- .............................................................................
|
|
-- copy characters of a numeric string into a corresponding array
|
|
-- digits are numbered 1 to n from right to left
|
|
method s2a(numbr) private static
|
|
result = 0
|
|
lstr = numbr.length()
|
|
loop z_ = 1 to lstr
|
|
result[z_] = numbr.substr(lstr - z_ + 1, 1)
|
|
end z_
|
|
result[0] = lstr
|
|
return result
|
|
|
|
-- .............................................................................
|
|
-- turn the array of digits into a numeric string
|
|
method a2s(numbr) private static
|
|
result = ''
|
|
loop z_ = numbr[0] to 1 by -1
|
|
result = result || numbr[z_]
|
|
end z_
|
|
return result
|
|
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
method runSample(arg) private static
|
|
mms = [ -
|
|
123', '123, -
|
|
012', '12, -
|
|
123456789012' , '44444444444, -
|
|
2 ** 64' , '2**64, -
|
|
0' ,0 ' -
|
|
]
|
|
ok = 0
|
|
errors = 0
|
|
|
|
loop mm over mms
|
|
parse mm multiplier . ',' multiplicand .
|
|
builtIn = multiplier * multiplicand
|
|
calculated = multiply(multiplier, multiplicand)
|
|
say 'Calculate' multiplier + 0 'x' multiplicand + 0
|
|
say 'Built in:' builtIn
|
|
say 'Derived: ' calculated
|
|
say
|
|
if builtIn = calculated then ok = ok + 1
|
|
else errors = errors + 1
|
|
end mm
|
|
say ok 'ok'
|
|
say errors 'not ok'
|
|
|
|
return
|