1. 程式人生 > >新浪前端面試題(二)

新浪前端面試題(二)

兩道演算法題:

一、給出一個演算法,輸入為十六進位制或十進位制的字串,輸出為對應的十進位制或十六進位制的字串。例 '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之間的整數,也可以省略,預設為十進位制;