一道筆試題:C#下十進位轉十六進位

來源:互聯網
上載者:User

    作為電子專業的學生,我發現越來越多的同學轉向軟體開發方向,雖然我們專業跟軟體沒沾多少邊。以下是我同學發給我的一道筆試題,讓我周一前寫完,以下是詳細內容,權當做學習一下吧。

筆試題    題幹

    選擇一門熟悉的語言,請用此語言編寫如下函數, 採用自己的演算法,不要使用 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;        }    }}

    運行結果

    

    很顯然,實現起來不難,就算是有些小問題,網上解決方案也很多,但是……我把代碼注釋寫的盡量詳細,也提醒了一下同學多理解一下代碼,希望不要僅僅為了找工作而學編程。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.