PHP世纪论坛

 找回密码
 立即注册
搜索
查看: 359|回复: 0

在JavaScript进行大整数计算

[复制链接]

32

主题

32

帖子

194

积分

新手上路

Rank: 1

积分
194
发表于 2016-3-19 17:57:53 | 显示全部楼层 |阅读模式
js-BIO(全称为 JavaScript Big Integer Operations)的原理非常简单,就是模拟纸笔运算,输入数字后,它就像一位小学生一样耐心地一位一位地计算。目前它支持正整数的加、减、乘、除、求余,以及大于、等于、小于等运算。

来看几个例子:
  1. var a = "218093290301725279849294552737145306526429515095910348328784867259719961681262317171990366018836471452273795738712382654617011499370332067465452153429131133154474494728461513797156576311424209209825768452476998761186844896333150192092696406370188813135474544186922431865203259468892782696696554856807492686240273426580684476908600903286664578178500293562463803241679236095343405558144595606432072340054",
  2.         b = "759453421168594746297585634824794585057708073795685055048450994660667302169842440997187780071628842999365618342370044730249364762070171939525787172608446535167458760784909718498489041640160903072085566658168644606091524276643802085431070120034640336353069020700940598038997582524596177336508",
  3.         c;

  4. // 计算 a + b
  5. c = BIO.add(a, b);
  6. console.log(c); // => 218093290301725279849294552737145306526429515095910348328784867259719961681262317171990366018836471452273795739471836075785606245667917702290246738486839206950159549776912508457823878481266650207013548524105841760552463238703194922342061168440360752661261716795368967032662020253802501195185596496968395758325840084749329083000125179930466663609570413597104139594748256796284003597142178131028249676562

  7. // 计算 a - b
  8. c = BIO.minus(a, b);
  9. console.log(c); // => 218093290301725279849294552737145306526429515095910348328784867259719961681262317171990366018836471452273795737952929233448416753072746432640657568371423059358789439680010519136489274141581768212637988380848155761821226553963105461843331644300016873609687371578475896697744498683983064198207513216646589614154706768412039870817076626642862492747430173527823466888610215394402807519147013081835895003546

  10. // 计算 a * b
  11. c = BIO.multiply(a, b);
  12. console.log(c); // => 165631695453560768931354179676327783789554654471289094267396314999551619350086706770637603163259782521350605065527228675367441009889563464536042123812298158775025038552756989906635218183772046533558978457853765293877902141330057087553963131601282691171759816841117292436049592274238065569156249246125691526163874951713797884657704497629753668671292281869762553374641310311774140912980126830919151808832669504364383900117665833031771105917192115442091637918088985032215601898962325376736104912045524501146768304386244267559527475259139329594399610587041338732488477674534017135328109239900803529659849632039837754817318175918697532072796924765669004218196032450409366708571087537016172564891432

  13. // 计算 a / b
  14. c = BIO.divide(a, b);
  15. console.log(c); // => 287171384343938182302166283267955634005236318876904228926536131374862297188572994580923635532994904266143630527

  16. // 计算 a mod b
  17. c = BIO.mod(a, b);
  18. console.log(c); // => 592025574073873421838644719778706564169852072684877302818315404363803007260660346662730591457239291807144570448333654917475379749402034885167586678975138436729309695698180319906813373242540831615098968972192135361399928745893872371373756948364150937205578085919887319866770529450275971960338
复制代码


根据 js-BIO 的原理,它能处理的数字大小只取决于可用内存的大小。当然,模拟纸笔计算的效率并不是很高,因此,如果输入的数字越大,计算所需的时间也就越长。

GitHub:https://github.com/oldj/js-BIO
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|PHP世纪论坛 ( 豫ICP备15004666号-2

GMT+8, 2018-12-15 10:18

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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