中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么實現翻轉整數

發布時間:2022-04-13 16:20:56 來源:億速云 閱讀:345 作者:iii 欄目:編程語言

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

Reverse Integer 翻轉整數

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.

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

解法一:

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;
    }
};

在貼出答案的同時,OJ 還提了一個問題 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 呢,因為輸入的x也是一個整型數,所以x的范圍也應該在 -2147483648~2147483647 之間,那么x的第一位只能是1或者2,翻轉之后 res 的最后一位只能是1或2,所以 res 只能是 2147483641 或 2147483642 都在 int 的范圍內。但是它們對應的x為 1463847412 和 2463847412,后者超出了數值范圍。所以當過程中 res 等于 214748364 時, 輸入的x只能為 1463847412, 翻轉后的結果為 2147483641,都在正確的范圍內,所以不用 check。

我們也可以用 long 型變量保存計算結果,最后返回的時候判斷是否在 int 返回內,但其實題目中說了只能存整型的變量,所以這種方法就只能當個思路擴展了,參見代碼如下:

解法二:

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;
    }
};

到此,關于“C++怎么實現翻轉整數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

昭平县| 枞阳县| 宁安市| 平乐县| 玉门市| 十堰市| 泰兴市| 崇左市| 德惠市| 长春市| 扶风县| 图们市| 十堰市| 宜章县| 元阳县| 台湾省| 甘南县| 金华市| 鄱阳县| 岑巩县| 岳阳市| 修文县| 浏阳市| 成武县| 永嘉县| 青浦区| 湾仔区| 桑日县| 郯城县| 奈曼旗| 平定县| 凤翔县| 金山区| 西盟| 蒙山县| 宁乡县| 阜阳市| 武山县| 汝阳县| 西吉县| 北票市|