/*面试题:随机给出一串整数,取最长的连续数组,如[6,7,11,9,12,14,13,15] 得出[11,12,13,14,15]*/ function maxContinueArray(input){ if(!input&&input.length===0)return; var tempArray=[],maxArray=[],tempInt,nextInt,index,size,flag=false; var sort_array=input.sort(function(a,b){return a-b;}); for(index=0,size=sort_array.length;index<size;index++){ tempInt=Number(sort_array[index]); nextInt=Number(sort_array[index+1]);//数组溢出的时候返回NaN tempArray.push(tempInt); if(flag=(tempInt+1)===nextInt?false:true){ if(Math.max(tempArray.length,maxArray.length)===tempArray.length){ maxArray=tempArray.slice(0); } tempArray=[]; } } return maxArray; }
/*面试题:大整数相加,支持超出整数类型的长度,用数组表示*/ function plus(input,input2){ if(input===undefined||input.length===0)return; if(input2===undefined||input2.length===0)return; var str1=String(input),str2=String(input2),result=''; result=str1.length>str2.length?calcu(str1,str2):calcu(str2,str1); function calcu(m,s){ var a,b,c,d=0,ret=[],i=0,sSize=s.length; for(var index=m.length-1;index>=0;index--){ ++i; a=m[index]; b=s[sSize-i]||0; c=Number(a)+Number(b)+d; if(c<10){ ret.push(c); d=0; }else{ ret.push((c-10)); d=1; } } return ret.reverse().join(''); } return result; }
今天去面试了,结果题目做得一团遭, 两条编程题直接用笔写,还真是有难度, 写了1个钟,结果回家在firefox上测试,全部输出错误, 题目一加了一些多余的判断,导致了输出永远是第一个连续数组。
题目二, 压根就不用看,进位的时候,我都忘记去减10, 还有计算出来的结果忘记逆序输出, oh, my god, 学艺不精。
上网看了人家一篇大整数相加,一测试,跟我写的一样的不够健壮。
function add(a, b){ var SPLITE_LENGTH = 3; var aL = String(a), bL = String(b); var resout = '', c = 0; while(aL != 0 || bL != 0){ var aR = aL.slice(-SPLITE_LENGTH), bR = bL.slice(-SPLITE_LENGTH); var t = String(parseInt(aR) + parseInt(bR) + c); resout = t.slice(-SPLITE_LENGTH) + resout; // 字符拼接 c = parseInt(t.slice(0, -SPLITE_LENGTH)||'0'); aL = aL.slice(0, -SPLITE_LENGTH)||'0'; bL = bL.slice(0, -SPLITE_LENGTH)||'0'; console.log(resout, aL, bL, c); } if(c){ resout = String(c) + resout; } return resout; }
测试用例:
1.大正整数
plus(123151541512315150, 48154546104815460)
输出: "171306087617130610"
add(123151541512315150, 48154546104815460)输出: "171306087617130610"
2.负数plus(-123151541512315150, 48154546104815460)
输出: "NaN171306087617130610"
add(-123151541512315150, 48154546104815460)
输出:"NaN171306087617130610"
3.输出小数:
plus(-12315154151231.5150, 48154546104815460)
输出:"NaN17130608761713NaN976"
add(-12315154151231.5150, 48154546104815460);
输出:"NaN171306087616846976":