新浪前端面試題(二)
阿新 • • 發佈:2019-02-16
兩道演算法題:
一、給出一個演算法,輸入為十六進位制或十進位制的字串,輸出為對應的十進位制或十六進位制的字串。例 '100'=>'aa', 'ff' =>'255'; //這道題給的不是很好,首先題目中沒有給出16進位制的特徵,造成無法判別16進位制還是10進位制。其次,例子中是由錯誤的,16進位制'100'=》十進位制'64' //但是是面試,還是得寫一下,分別實現一下轉換把 //首先十六進位制或十進位制的字串 //第一種方法 function translateTo16 (string){ let arr = string.split(''), length = arr.length, translateArr = []; arr.forEach((item, index) => { switch(item){ case 'A': case 'a': item = 10; break; case 'B': case 'b': item = 11; break; case 'C': case 'c': item = 12; break; case 'D': case 'd': item = 13; break; case 'E': case 'e': item = 14; break; case 'F': case 'f': item = 15; break; } translateArr.push (parseInt(item) *Math.pow(16, length-index-1)); }) console.log(translateArr); return translateArr.reduce((pre, cur) => { return pre+cur; }) } 第二種方法: parseInt(string, 16); //對於十進位制轉換為十六進位制,我們可以參考十進位制轉換為二進位制 //首先定義一個轉碼的函式 function zhuanMa (item){ switch(item){ case 10: item = 'A'; break; case 11: item = 'B'; break; case 12: item = 'C'; break; case 13: item = 'D'; break; case 14: item = 'E'; break; case 15: item = 'F'; break; } return item; } //主函式 function main(num){ let arr =[];//保輸出 while(num>15){ res = Math.floor(num/16);//其中使用Math.floor()方法取商的下确界 arr.push(zhuanMa(res)); num = num%16; } arr.push(zhuanMa(num)); return arr.join(''); } //測試 let string = 'ff'; console.log(main(sting));
簡單介紹一下parseInt(0函式:
parseInt(string, index) 對字串按照給定index進位制進行解析,返回十進位制表示的數值。
其中index可取2~36之間的整數,也可以省略,預設為十進位制;