关注前端 | 前端博客
当前位置: JavaScript > JS-算法题

JS-算法题

2018-07-13 分类:JavaScript 作者:管理员 阅读(84)

题目:实现超出整数存储范围的两个大整数想加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进这个空数组,标记数组④

⑤数组④里的值再用比较排序的原理再处理下,差不多就出来了,不废话了,直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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))
题目:实现超小数相加精确度的处理,返回值都是字符串。
1
2
3
4
5
6
7
8
9
10
11
12
13
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

「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(1) 打赏

感谢您让我添加个鸡腿!

支付宝
微信
1

感谢您让我添加个鸡腿!

支付宝
微信
标签:

上一篇:

下一篇:

共有 0 条评论 - JS-算法题

博客简介

一位不知名的前端工程师,专注全栈技术,分享各种所遇问题与个人心得,梦想成为一位知名大神!

最近更新

精彩评论

服务热线:
 177****6038

 QQ在线交流

 旺旺在线