作为电子专业的学生,我发现越来越多的同学转向软件开发方向,虽然我们专业跟软件没沾多少边。以下是我同学发给我的一道笔试题,让我周一前写完,以下是详细内容,权当做学习一下吧。
选择一门熟悉的语言,请用此语言编写如下函数, 采用自己的算法,不要使用 printf, sprintf, Format, toString, itoa, toHex,等函数。
TQ_GetHexStringEx
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; } } }
很显然,实现起来不难,就算是有些小问题,网上解决方案也很多,但是……我把代码注释写的尽量详细,也提醒了一下同学多理解一下代码,希望不要仅仅为了找工作而学编程。