回覆列表
  • 1 # 程式設計老大叔

    倒序輸出一個整數是很多朋友程式設計入門都會遇到的練習題,那麼我們該如何去實現它呢?其實單純說程式碼怎麼實現是很簡單的,但是開發者不應該只注重程式碼實現而不去管解題思路和演算法設計思想,這裡,我就我所學知識分享一下該問題的幾個實現方法

    利用基本運算子取餘

    假設輸入一個整數a=123456,如果倒序輸出就是654321;這裡我們首先很容易想到用迴圈來實現,從最後面一位起,往左每次輸出一位,那麼問題是怎麼去讓他往左每次輸出一位呢?對,對整數用10取餘,因為我們用的整數都是十進位制的,所以用10取餘後,就會剩下個位,123456第一次取餘結果是6,那麼下一次迴圈怎麼辦呢?怎麼讓123456變成12345就好了。對,就是這個思路,我們直接對將123456除以10得到12345.6,得到的是浮點數,怎麼辦呢?

    還記得int的隱式轉換麼?12345.6轉換為int後,小數點後面的會丟失,只保留整數。OK,剛好利用這個特性就可以實現了。

    轉換為字元處理

    上面講的方法是最基本的方法,很多初學者應該都有接觸過,下面這個方法就是將整型轉換為字串來處理,利用一些字串處理函式,這個可能比上一個方法用到的知識更多一些。

    第一個用到的是逆序迭代器

    第二個用到的是字串擷取,從最後一位開啟往前擷取

    把整數轉換為字元陣列再利用迴圈從後往前

    透過字元陣列和棧實現

    一想到逆序我們很自然會想到棧這個先進後出的資料結構,那麼這個問題雖然用不到棧這麼複雜的技術,但是這也未嘗不是一個思路,一個問題多種實現方式,從中尋求最簡潔最快速的方法不正是演算法開發的魅力麼?

    該方法的思路是:將整數轉換為字元陣列然後將陣列逐一入棧,最後再逐一出棧,這樣就實現了逆序的輸出。

    總結

    一個簡單的演算法問題,我給出了上面幾個解決方案,但是就實用性、簡便性和效率肯定是第一個,為什麼又忍不住寫後面幾種方法呢?其實我們在日常的開發工作中,一個業務需求的實現我們要做的不僅僅只想辦法去實現它,而是儘可能想更多的方法,然後以最優的方法去解決它。

  • 中秋節和大豐收的關聯?
  • 怎樣治療豬狂犬病?