Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,39 @@
|
|||
(lib 'math) ;; for poly multiplication
|
||||
|
||||
;; convert string of decimal digits to polynomial
|
||||
;; "1234" → x^3 +2x^2 +3x +4
|
||||
;; least-significant digit first
|
||||
(define (string->long N)
|
||||
(reverse (map string->number (string->list N))))
|
||||
|
||||
;; convert polynomial to string
|
||||
(define (long->string N)
|
||||
(if (pair? N)
|
||||
(string-append (number->string (first N)) (long->string (rest N))) ""))
|
||||
|
||||
;; convert poly coefficients to base 10
|
||||
(define (poly->10 P (carry 0))
|
||||
(append
|
||||
(for/list ((coeff P))
|
||||
(set! coeff (+ carry coeff ))
|
||||
(set! carry (quotient coeff 10)) ;; new carry
|
||||
(modulo coeff 10))
|
||||
(if(zero? carry) null (list carry)))) ;; remove leading 0 if any
|
||||
|
||||
;; long multiplication
|
||||
;; convert input - strings of decimal digits - to polynomials
|
||||
;; perform poly multiplication in base 10
|
||||
;; convert result to string of decimal digits
|
||||
|
||||
(define (long-mul A B )
|
||||
(long->string (reverse (poly->10 (poly-mul (string->long A) (string->long B))))))
|
||||
|
||||
(define two-64 "18446744073709551616")
|
||||
(long-mul two-64 two-64)
|
||||
→ "340282366920938463463374607431768211456"
|
||||
|
||||
;; check it
|
||||
(lib 'bigint)
|
||||
Lib: bigint.lib loaded.
|
||||
(expt 2 128)
|
||||
→ 340282366920938463463374607431768211456
|
||||
Loading…
Add table
Add a link
Reference in a new issue