明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1472|回复: 0

[基础教程] 求a^N幂方

[复制链接]
发表于 2014-11-30 18:46:38 | 显示全部楼层 |阅读模式

;;;求a^N幂方  如(pow 5 10000)将得到6990位的大数
(defun fbin (n)
(setq binlst nil)
(while (> n 0)
    (setq b (rem n 2))
    (setq binlst (cons b binlst))
    (setq n (lsh n -1))
)
binlst
)
(defun add (lst1 lst2)
  (setq k1 (length lst1))
  (setq k2 (length lst2))
  (if (> k1 k2)
          (repeat (- k1 k2)  (setq lst2 (cons 0 lst2)) )
          (repeat (- k2 k1)  (setq lst1 (cons 0 lst1)) )
   )
  (setq addlst (mapcar '(lambda (x y) (+ x y)) lst1 lst2 ))
  addlst
)
(defun lnum (lst n n0)
   (setq lst (mapcar '(lambda (x) (* x n))  lst))
   (setq zlst (reverse lst))
   (repeat n0 (setq zlst (cons 0 zlst) ) )
(reverse zlst)
)  
(defun xc(lst1 lst2)
   (setq n1 (length lst1))
   (setq n2 (length lst2))
   (setq j 1 fflst '(0))
   (if (> n1 n2)
          (while (<= j n2)
              (setq fflst (add (lnum lst1 (nth (- j 1) lst2) (- n2 j) ) fflst))
              (setq j (+ 1 j))
           )
          (while (<= j n1)
              (setq fflst (add (lnum lst2 (nth (- j 1) lst1) (- n1 j) ) fflst))
              (setq j (+ 1 j))
           )
    )
fflst
)
(defun jinw (blst)
    (while (not (apply 'and (mapcar '(lambda (x) (<= x 9)) blst )))
         (setq hlst (mapcar '(lambda (x) (rem x 10)) blst))
         (setq qlst (mapcar '(lambda (x) (/ x 10)) blst))
         (setq qlst (append qlst (list 0)))
         (setq blst (add hlst qlst))
    )
  blst
)
(defun sr (a)
   (setq n (strlen a) i 1 lst nil)
   (while (<= i n)
        (setq lst (cons (atoi (substr a i 1)) lst))
        (setq i (+ 1 i))
   )
   (reverse lst)
)
(defun dc (a b)
  (setq lst1 (sr a))
  (setq lst2 (sr b))
  (setq tenlst (jinw (xc lst1 lst2)))
  (setq str (apply 'strcat (mapcar '(lambda (x) (itoa x)) tenlst ) ) )
  (if (= (car tenlst) 0)
      (setq str (vl-string-left-trim "0" str))
  )
str
)
(defun pow (x n)
   (setq x (itoa x))
   (if (= (rem n 2) 0) (setq y "1")(setq y x))
   (setq binlst (cdr (reverse (fbin n))))
   (setq xlst (mapcar '(lambda (i) (setq x (dc x x)))  binlst))
   (setq ylst (mapcar '(lambda (i j) (if (= i 1) (setq y (dc y j)))) binlst xlst))                  
   (last ylst)   
)
(pow 5 10000)

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-24 08:48 , Processed in 0.160382 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表