RosettaCodeData/Task/Long-multiplication/Tcl/long-multiplication.tcl
2023-07-01 13:44:08 -04:00

28 lines
653 B
Tcl

package require Tcl 8.5
proc longmult {x y} {
set digits [lreverse [split $x ""]]
set result {0}
set j -2
foreach m [lreverse [split $y ""]] {
set c 0
set i [incr j]
foreach d $digits {
set v [lindex $result [incr i]]
if {$v eq ""} {
lappend result 0
set v 0
}
regexp (.)(.)$ 0[expr {$v + $c + $d*$m}] -> c v
lset result $i $v
}
lappend result $c
}
# Reconvert digit list into a decimal number
set result [string trimleft [join [lreverse $result] ""] 0]
if {$result == ""} then {return 0} else {return $result}
}
puts [set n [expr {2**64}]]
puts [longmult $n $n]
puts [expr {$n * $n}]