题目:实现超出整数存储范围的两个大整数想加function(a,b)。注意:参数a和b以及函数返回值都是字符串。
目的:考算法, 基本逻辑。
我实现的基本思路是:
①两个数字字符串长度补成一样,用字符串'0’补位,比如 a='1111',b='22',b用'0'补位成='0022'.
②分3中情况处理,初始值的长度比较,,a的长度大于b的长度,b的长度大于a的长度,a的长度等于b的长度
③初始值的长度比较,,a的长度大于b的长度,补位比较简单,再用两个空数组push进去,push的时候都parseInt( )转换成数字,为后面好计算
④再准备个空数组,for循环 把③的两个数组里对应的索引值的值想加后的值push进这个空数组,标记数组④
⑤数组④里的值再用比较排序的原理再处理下,差不多就出来了,不废话了,直接上代码
function add
(a
,b
){
var arr
=[];
var len
=a
.length
>b
.length?a
.length
:(a
.length
<b
.length?b
.length
:a
.length
);
var n
=a
.length
>b
.length?a
.length
-b
.length
:b
.length
-a
.length
;
if(a
.length
===b
.length
){
for(var i
=0;i
<len
;i
++){
arr
.unshift
(parseInt
(a
[i
])+parseInt
(b
[i
]))
}
}else{
var str
='';
for(var i
=0;i
<n
;i
++){
str
+='0';
}
var _this
= a
.length
>b
.length ? str
+b
: str
+a
;
if(a
.length
>b
.length
){
for(var i
=0;i
<len
;i
++){
arr
.unshift
(parseInt
(a
[i
])+parseInt
(_this
[i
]))
}
}else{
for(var i
=0;i
<len
;i
++){
arr
.unshift
(parseInt
(b
[i
])+parseInt
(_this
[i
]))
}
}
}
for(var i
=0;i
<len
-1;i
++){
for(var j
=0;j
<len
-1-i
;j
++){
if(arr
[j
]>=10){
var temp
=arr
[j
]-10;
arr
[j
]=temp
;
arr
[j
+1]=arr
[j
+1]+1;
}else{
arr
[j
]=arr
[j
];
}
}
}
return arr
.reverse
().join('');
}
var a
='111';
var b
='22275676575'
console
.log(add
(a
,b
))
console
.log(parseInt
(a
)+parseInt
(b
))
题目:实现超小数相加精确度的处理,返回值都是字符串。
function add
(a
,b
){
var aStr
=a
.toString
();
var bStr
=b
.toString
();
var aLen
=aStr
.length
;
var bLen
=bStr
.length
;
var resStr
=aLen
>bLen?aStr
:bStr
;
var resLen
=aLen
>bLen?aLen
:bLen
;
var n
= resLen
- resStr
.indexOf
('.')-1;
return (a
*10*n
+b
*10*n
)/(10*n
)
}
console
.log(add
(0.1,0.2))//0.3
console
.log(add
(0.1,0.00000002))//0.10000002
console
.log(add
(0.01,0.0000002))//0.0100002
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 条评论 - JS-算法题