【leetcode】7 反轉整數 (c++)
阿新 • • 發佈:2018-12-26
給定一個 32 位有符號整數,將整數中的數字進行反轉。
示例 1:
輸入: 123 輸出: 321
示例 2:
輸入: -123 輸出: -321
示例 3:
輸入: 120 輸出: 21
注意:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。
感覺leetcode和pat不一樣的地方在於不能鑽printf 的空子.....說怎樣返回就得按順序放數組裡返回
注意點:
1 溢位的判斷:設定了邊界值MAX和MIN
2 負號“-”的處理:反轉之後刪掉末尾的,加到首位(應該有許多更簡單的辦法)
3 末尾0的處理 atoi函式自己處理了
提交程式碼
class Solution { public: int reverse(int x) { int MAX = 0x7fffffff; int MIN = 1 << 31; ostringstream stream,smax,smin; string ss; stream << x; ss += stream.str(); smax << MAX; string max_num = smax.str(); smin << MIN; string min_num = smin.str(); std::reverse(ss.begin(),ss.end()); if(x<0){//處理負數的“-” ss.insert(0,"-"); ss.pop_back(); } if(x > 0 && ss.size() >= max_num.size() && (ss > max_num)) return 0;//上溢 else if(x < 0 && ss.size() >= min_num.size() && ss > min_num) return 0;//下溢 else return atoi(ss.c_str()); } };
除錯程式碼
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<sstream> using namespace std; int main(){ int x; int MAX = 0x7fffffff; int MIN = 1 << 31; scanf("%d",&x); ostringstream stream,smax,smin; string ss; stream << x; ss += stream.str(); smax << MAX; string max_num = smax.str(); smin << MIN; string min_num = smin.str(); std::reverse(ss.begin(),ss.end()); if(x<0){ ss.insert(0,"-"); ss.pop_back(); } //compare with string printf("%s\n",ss.c_str()); printf("%s\n",min_num.c_str()); if(x > 0 && ss.size() >= max_num.size() && (ss > max_num)) printf("01\n");//return 0 上溢 else if(x < 0 && ss.size() >= min_num.size() && (ss > min_num)) printf("02\n");//下溢 printf("%d",atoi(ss.c_str())); }