思惟的發散

1、字符串的操做字符串

字符串是能夠倒着拼接的!!!it

例子:好比輸入一個整型數字123456,要求輸出對應的中文「一二三四五六」for循環

實現方法:變量

  咱們用for循環對10取餘數能夠很容易的按照以下順序拿到每一位的數字循環

  六、五、四、三、二、1(能夠看出數字是倒序的)方法

  有幾種方法能夠處理這些數據數據

  方法一:思考

    先獲得一個倒序的數值:654321,而後再把這個654321用for循環對10取餘數,就可拿到原始順序排列的每一位數字一、二、三、四、五、6字符

    以後經過switch case語句取到對應的中文便可cas

    但這種作法存在一個隱患,對10的倍數的數值會丟掉末尾的0,例如20000,獲得的倒序數值是2,而不會是指望的00002

  方法二:

    利用數字的位數進行修正

    對於一個具體的輸入數值,咱們可拿到其最高位數

    這樣咱們就能夠寫一個for循環,從最高位開始往下取出每一位的數字進行操做

    取每一位數字的方法,能夠在循環內嵌套一個不斷除以10的for循環(須要注意的是,在最外層的for循環中,每循環一次都要【減去】對應位的數值)

    即123456,共有六位數,從最高位開始循環,取到1後,123456要減掉100000,拿到23456後再開始下一輪的循環

    這樣就能避免10的倍數的隱患,取到每個位上的數字

  方法三:

    設置兩個字符串變量,str_result=「」,str

    在for循環的每一輪中可按照倒序取到一位數字,在拿到數字後,直接用switch case語句獲取對應中文,賦值給str

    利用下面這條語句

    str_result = str + str_result;

    【將新的字符串拼接到舊字符串的「前面」】,問題解決!

思考:

  方法一是比較直白的思路,但不夠嚴謹

  方法二雖然能實現需求,可是嵌套了兩層的for循環,而且還要建立中間變量用以不斷減去當前的最高位,不夠優雅

  方法三隻用了一層循環就解決了問題,代碼比方法二要簡潔,理解起來也更爲順暢

相關文章
相關標籤/搜索