JS-一个算法题

题目:实现超出整数存储范围的两个大整数想加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 var a='999999911111111111';
  2 var b='999999911111111111199999999999999'
  3 function add(a,b){
  4     var aLen=a.length;
  5     var bLen=b.length;
  6     var n;
  7     if(aLen-bLen>0){
  8         n=aLen-bLen;
  9         var str='';
 10         for(var i=0;i<n;i++){
 11             str+='0';
 12         }
 13         var resArr=str+b;
 14         var arr=[];
 15         var arr1=[];
 16         for(var i=0;i<aLen;i++){
 17             arr.push(parseInt(a[i]))
 18             arr1.push(parseInt(resArr[i]))
 19         }
 20         var arr2=[];
 21         for(var i=0;i<arr.length;i++){
 22             arr2.push(arr[i]+arr1[i])
 23         }
 24         var newArr=arr2.reverse();
 25 
 26         var len=newArr.length;
 27 
 28         for(var i=0;i<len-1;i++){
 29             for(var j=0;j<len-1-i;j++){
 30                 if(newArr[j]>=10){
 31                     var temp=newArr[j]-10;
 32                     newArr[j]=temp;
 33                     newArr[j+1]=newArr[j+1]+1;
 34                 }else{
 35                     newArr[j]=newArr[j];
 36                 }
 37             }
 38         }
 39         return newArr.reverse().join('');
 40     }else if(aLen-bLen<0){
 41         n=bLen-aLen;
 42         var str='';
 43         for(var i=0;i<n;i++){
 44             str+='0';
 45         }
 46         var resArr=str+a;
 47         var arr=[];
 48         var arr1=[];
 49         for(var i=0;i<bLen;i++){
 50             arr.push(parseInt(b[i]))
 51             arr1.push(parseInt(resArr[i]))
 52         }
 53         var arr2=[];
 54         for(var i=0;i<arr.length;i++){
 55             arr2.push(arr[i]+arr1[i])
 56         }
 57         var newArr=arr2.reverse();
 58 
 59         var len=newArr.length;
 60 
 61         for(var i=0;i<len-1;i++){
 62             for(var j=0;j<len-1-i;j++){
 63                 if(newArr[j]>=10){
 64                     var temp=newArr[j]-10;
 65                     newArr[j]=temp;
 66                     newArr[j+1]=newArr[j+1]+1;
 67                 }else{
 68                     newArr[j]=newArr[j];
 69                 }
 70             }
 71         }
 72         return newArr.reverse().join('');
 73     }else{
 74         var arr=[];
 75         var arr1=[];
 76         for(var i=0;i<bLen;i++){
 77             arr.push(parseInt(b[i]))
 78             arr1.push(parseInt(a[i]))
 79         }
 80         var arr2=[];
 81         for(var i=0;i<arr.length;i++){
 82             arr2.push(arr[i]+arr1[i])
 83         }
 84         var newArr=arr2.reverse();
 85 
 86         var len=newArr.length;
 87 
 88         for(var i=0;i<len-1;i++){
 89             for(var j=0;j<len-1-i;j++){
 90                 if(newArr[j]>=10){
 91                     var temp=newArr[j]-10;
 92                     newArr[j]=temp;
 93                     newArr[j+1]=newArr[j+1]+1;
 94                 }else{
 95                     newArr[j]=newArr[j];
 96                 }
 97             }
 98         }
 99 
100         return newArr.reverse().join('');
101     }
102 }
103 console.log(add(a,b))
104 console.log(parseInt(a)+parseInt(b))

猜你喜欢

转载自www.cnblogs.com/studyshufei/p/8947950.html