题目:实现超出整数存储范围的两个大整数想加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))