【01-04】大数相加

JS 实现两个大数相加?

当有两个整数 a 和 b ,在通常情况下我们有“+”运算符对其进行相加运算:

let sum = a + b;

但是 JS 在存放整数的时候是有一个安全范围的,一旦数字超过这个范围便会损失精度。

我们不能拿精度损失的数字进行运行,因为运算结果一样是会损失精度的。

所以,我们要用字符串来表示数据!(不会丢失精度)

JS 中整数的最大安全范围可以查到是:9007199254740991

假如我们要进行 9007199254740991 + 1234567899999999999

我们要先准备两个字符串变量和一个方法:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //...
}

然后将字符串长度对齐:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //取两个数字的最大长度
   let maxLength = Math.max(a.length, b.length);
   //用0去补齐长度
   a = a.padStart(maxLength , 0);//"0009007199254740991"
   b = b.padStart(maxLength , 0);//"1234567899999999999"
}

然后从个位开始相加:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //取两个数字的最大长度
   let maxLength = Math.max(a.length, b.length);
   //用0去补齐长度
   a = a.padStart(maxLength , 0);//"0009007199254740991"
   b = b.padStart(maxLength , 0);//"1234567899999999999"
   //定义加法过程中需要用到的变量
   let t = 0;
   let f = 0;   //"进位"
   let sum = "";
   for(let i=maxLength-1 ; i>=0 ; i--){
      t = parseInt(a[i]) + parseInt(b[i]) + f;
      f = Math.floor(t/10);
      sum = t%10 + sum;
   }
   if(f == 1){
      sum = "1" + sum;
   }
   return sum;
}

运行:

add(a ,b); //结果为:1243575099254740990
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一般情况下用js写一个两个数相加的函数很简单,如下: 我们在控制台运行一下,发现打印出了4,没有问题 但是我们改一...
    鱼仔1234阅读 7,060评论 1 5
  • Js 超大整数相加的解决方案 如果我们想要对一个超大的整数(> Number.MAX_SAFE_INTEGER)进...
    小小的白菜阅读 421评论 1 0
  • 背景 Js 和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数(> Number.MAX_S...
    VoyagerOne阅读 11,794评论 5 9
  • 第 2 章值 数组( array)、字符串( string)和数字( number)是一个程序最基本的组成部分 2...
    不系流年系乾坤阅读 335评论 0 0
  • 背景Js 和任何一门语言一样,对其数值的范围有限制。 如果我们想要对一个超大的整数(> Number.MAX_SA...
    pansly阅读 1,377评论 0 1