js算法_实现两个大数相加padStart方法

君哥 阅读:1366 2021-02-21 19:39:37 评论:2

 

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

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

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

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

安全范围是 2的53次方 9007199254740991

假如我们要进行 9007199254740991 + 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)


padStart()方法,padEnd()方法补充

补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。


'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"

上面代码中,padStart()和padStart()一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。

如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
如果省略第二个参数,默认使用空格补全长度。
padStart()的常见用途是为数值补全指定位数。下面代码生成 10 位的数值字符串。


本文链接:https://www.yanjun202.com/post/72.html 

分享到:
可以去百度分享获取分享代码输入这里。
发表评论
  • 浅***妈(匿名 发表于 刚刚 回复

    学到了呀君哥,好好小本子记下来,下次面试可能就问到我这个问题了

搜索
排行榜
关注我们

扫一扫关注我们,了解最新精彩内容