C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)

這篇文章主要介紹“C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)”,在日常操作中,相信很多人在C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

十年建站經(jīng)驗(yàn), 成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)客戶的見證與正確選擇。成都創(chuàng)新互聯(lián)提供完善的營銷型網(wǎng)頁建站明細(xì)報(bào)價(jià)表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。

Reverse Integer 翻轉(zhuǎn)整數(shù)

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [?231,  231 ? 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

翻轉(zhuǎn)數(shù)字問題需要注意的就是溢出問題,看了許多網(wǎng)上的解法,由于之前的 OJ 沒有對(duì)溢出進(jìn)行測(cè)試,所以網(wǎng)上很多人的解法沒有處理溢出問題也能通過 OJ?,F(xiàn)在 OJ 更新了溢出測(cè)試,所以還是要考慮到。為什么會(huì)存在溢出問題呢,由于int型的數(shù)值范圍是 -2147483648~2147483647, 那么如果要翻轉(zhuǎn) 1000000009 這個(gè)在范圍內(nèi)的數(shù)得到 9000000001,而翻轉(zhuǎn)后的數(shù)就超過了范圍。博主最開始的想法是,用 long 型數(shù)據(jù),其數(shù)值范圍為 -9223372036854775808~9223372036854775807, 遠(yuǎn)大于 int 型這樣就不會(huì)出現(xiàn)溢出問題。但實(shí)際上 OJ 給出的官方解答并不需要使用 long,一看比自己的寫的更精簡(jiǎn)一些,它沒有特意處理正負(fù)號(hào),仔細(xì)一想,果然正負(fù)號(hào)不影響計(jì)算,而且沒有用 long 型數(shù)據(jù),感覺寫的更好一些,那么就貼出來吧:

解法一:

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x != 0) {
            if (abs(res) > INT_MAX / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};

在貼出答案的同時(shí),OJ 還提了一個(gè)問題 To check for overflow/underflow, we could check if ret > 214748364 or ret < –214748364 before multiplying by 10. On the other hand, we do not need to check if ret == 214748364, why? (214748364 即為 INT_MAX / 10)

為什么不用 check 是否等于 214748364 呢,因?yàn)檩斎氲膞也是一個(gè)整型數(shù),所以x的范圍也應(yīng)該在 -2147483648~2147483647 之間,那么x的第一位只能是1或者2,翻轉(zhuǎn)之后 res 的最后一位只能是1或2,所以 res 只能是 2147483641 或 2147483642 都在 int 的范圍內(nèi)。但是它們對(duì)應(yīng)的x為 1463847412 和 2463847412,后者超出了數(shù)值范圍。所以當(dāng)過程中 res 等于 214748364 時(shí), 輸入的x只能為 1463847412, 翻轉(zhuǎn)后的結(jié)果為 2147483641,都在正確的范圍內(nèi),所以不用 check。

我們也可以用 long 型變量保存計(jì)算結(jié)果,最后返回的時(shí)候判斷是否在 int 返回內(nèi),但其實(shí)題目中說了只能存整型的變量,所以這種方法就只能當(dāng)個(gè)思路擴(kuò)展了,參見代碼如下:

解法二:

class Solution {
public:
    int reverse(int x) {
        long res = 0;
        while (x != 0) {
            res = 10 * res + x % 10;
            x /= 10;
        }
        return (res > INT_MAX || res < INT_MIN) ? 0 : res;
    }
};

到此,關(guān)于“C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)頁題目:C++怎么實(shí)現(xiàn)翻轉(zhuǎn)整數(shù)
鏈接地址:http://bm7419.com/article4/pcgeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、定制開發(fā)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司