描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
示例
输入:“1”,“99” 返回值:“100”
说明:1+99=100
输入:“9007199254740991”,“1234567899999999999”
返回值:“1243575099254740990”
思路:将两个大数字符串位数对齐(用0补齐),便于进行每位相加操作。循环进行每一位的相加,还要加上上一次循环产生的进位。sum为字符串,每次在之前的字符串前面增加最新的每位产生的和,使字符串向前不断增长。到最后一位相加时,判断是否存在进位(进位只有可能为1),若进位为1,则直接在当前字符串的最前面加上1。
function bigintAdd(s,t){
let maxLength=Math.max(s.length,t.length);
s=s.padStart(maxLength,0);
t=t.padStart(maxLength,0);
let bit=0;
let f=0;//进位
let sum="";
for(let i=maxLength-1;i>=0;i--){
bit=parseInt(s[i])+parseInt(t[i])+f;
f=Math.floor(bit/10);
sum=bit%10+sum;
}
if(f==1) {
sum="1"+sum;
}
return sum;
}
总结:本题所用的知识点
1. Math对象中的max()方法
max() 方法可返回两个指定的数中带有较大的值的那个数。
Math.max(x...)
参数说明:
x:0 或多个值。在 ECMASCript v3 之前,该方法只有两个参数。
返回值:
参数中最大的值。如果没有参数,则返回 -Infinity。如果有某个参数为 NaN,或是不能转换成数字的非数字值,则返回 NaN。
2. String对象中的padStart()方法
ES2017 引入了字符串补全长度的功能(某些版本浏览器可能暂时还不支持)
padStart() 方法用另一个字符串填充当前字符串(如果需要的话,会重复多次),以便产生的字符串达到给定的长度。从当前字符串的左侧开始填充。
str.padStart(targetLength [, padString])
参数说明:
targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
padString :(可选)填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的默认值为 " "(U+0020)。
返回值:在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串。
示例:
'abc'.padStart(10); // " abc"
'abc'.padStart(10, "foo"); // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0"); // "00000abc"
'abc'.padStart(1); // "abc"
3. JavaScript全局对象中的parseInt() 函数
parseInt() 函数可解析一个字符串,并返回一个整数。
parseInt(string, radix)
参数说明:
string:必需。要被解析的字符串。
radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值:返回解析后的数字。
说明:当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。举例,如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
parseInt("10"); //返回 10
parseInt("19",10); //返回 19 (10+9)
parseInt("11",2); //返回 3 (2+1)
parseInt("17",8); //返回 15 (8+7)
parseInt("1f",16); //返回 31 (16+15)
parseInt("010"); //未定:返回 10 或 8
4. Math对象中的floor()方法
floor() 方法可对一个数进行下舍入。
Math.floor(x)
参数说明:
x:必需。任意数值或表达式。
返回值:
小于等于 x,且与 x 最接近的整数。
floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。
5. 字符串使用加号运算符拼接
var s1 = "abc" , s2 = "def";
console.log(s1 + s2); //返回字符串“abcdef”
//数字同理同上
因篇幅问题不能全部显示,请点此查看更多更全内容