作為電子專業的學生,我發現越來越多的同學轉向軟體開發方向,雖然我們專業跟軟體沒沾多少邊。以下是我同學發給我的一道筆試題,讓我周一前寫完,以下是詳細內容,權當做學習一下吧。
筆試題 題幹
選擇一門熟悉的語言,請用此語言編寫如下函數, 採用自己的演算法,不要使用 printf, sprintf, Format, toString, itoa, toHex,等函數。
函數名稱
TQ_GetHexStringEx
參數
整數 iNumber
整數 iCount
傳回值
字串類型
函數描述
獲得表示iNumber十六進位字串,寬度不足iCount 時,前面補0。
舉例
TQ_GetHexStringEx(12,2); 返回 “0C”
TQ_GetHexStringEx(12,8); 返回 “000000C”
實現 題幹理解 題幹說的大意比較清晰,但是細節方面沒什麼規定,大意是:輸入一個10進位的數和一個位元限制,如果轉換後位元不足,前面補0。
介面圖
代碼
public partial class Form1 : Form{ public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } /// <summary> /// 擷取初始值,並運算 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { int iNumber = int.Parse(txt10.Text); int iCount = int.Parse(txtNum.Text); string n = TQ_GetHexStringEx(iNumber, iCount); txt16.Text = n; } /// <summary> /// 根據輸入的十進位數和規定的位元,返回16進位字串 /// </summary> /// <param name="iNumber">十進位數字</param> /// <param name="iCount">規定的位元</param> /// <returns>轉換完畢的字串</returns> public string TQ_GetHexStringEx(int iNumber, int iCount) { try { string strReturn=""; //數字小於16時 if (iNumber<16) { //數字字元個數大於iCount時,直接返回 if (iNumber.ToString().Length >= iCount) { strReturn =iNumber.ToString(); } //數字小於十六,字元數小於iCount時,補充0 else { //擷取需要補充的0的個數 int intDif = iCount - iNumber.ToString().Length; strReturn =FillString(iNumber.ToString(), intDif); } } //數字大於16時 else { string strTemp=Convery(iNumber); // 轉換出來的字串個數大於所給個數時 if (strTemp.Length > iCount) { strReturn = strTemp ; } // 轉換出來的字元個數小於所給個數時,補充0 else { int intDif = iCount - (Convery(iNumber)).Length; strReturn = FillString(strTemp, intDif); } } return strReturn; } catch (Exception e) { throw e; } finally { //TODO:如果此處涉及廢棄內容,刪除它們 } } /// <summary> /// 給出需要補充的字串和需要補充0的個數,補充字串 /// </summary> /// <param name="strPre">原字串</param> /// <param name="intNeed">需要補充0的個數</param> /// <returns>補充完畢的字串</returns> public string FillString(string strPre, int intNeed) { try { string strTemp = ""; string strFinal = ""; //字串前補充0 for (int i = 0; i < intNeed ; i++) { strTemp = strTemp + "0"; } strFinal = strTemp + strPre.ToString(); return strFinal; } catch (Exception e) { throw e; } } /// <summary> /// 返回數字對應的16進位字元 /// </summary> /// <param name="strNum">10進位數字</param> /// <returns>對應的A-F字元</returns> public string ToLetter(int intNum) { try { string strTemp = ""; //如果小於10不用轉換,直接返回 if (intNum<10) { strTemp = intNum.ToString(); return strTemp; } //如果是10-15,則轉換 switch (intNum) { case 10: strTemp= "A"; break; case 11: strTemp= "B"; break; case 12: strTemp= "C"; break; case 13: strTemp= "D"; break; case 14: strTemp= "E"; break; case 15: strTemp= "F"; break; } return strTemp; } catch (Exception e) { throw e; } } /// <summary> /// 輸入大於16的10進位數,轉換為16進位 /// </summary> /// <param name="intNum">10進位數</param> /// <returns></returns> public string Convery(int intNum) { try { string x = ""; int c; //用於存放除以16後的數 int s = 0;//數組容量 int n = intNum;//用於確定數組容量 //擷取數組容量 while (n >= 16) { s++; n = n / 16; } //建立數組 string[] m = new string[s+1]; //填充數組 int i = 0; do { c = intNum / 16; //判斷是否大於10,如果大於10,則轉換為A~F的格式 m[i++] = ToLetter(intNum % 16); intNum = c; } while (c >= 16); x = ToLetter(intNum); //拼接字串 for (int j = m.Length - 1; j >= 0; j--) { x += m[j]; } return x; } catch (Exception e) { throw e; } }}
運行結果
很顯然,實現起來不難,就算是有些小問題,網上解決方案也很多,但是……我把代碼注釋寫的盡量詳細,也提醒了一下同學多理解一下代碼,希望不要僅僅為了找工作而學編程。