【leetcode】7反転整数(c++)
2572 ワード
タイトルリンク
32ビットの符号付き整数を指定し、整数の数値を反転します.
例1:
例2:
例3:
注意:
我々の環境では32ビットの符号付き整数しか記憶できないと仮定し,その数値範囲は[−231,231−1]である.この仮定によれば,反転後の整数がオーバーフローすると0を返す.
leetcodeとpatが違うと思うのはprintfの穴をくぐれないこと...どうやって戻るかは順番に配列に入れて返さなければならない.
注意点:
1オーバーフローの判定:境界値MAXとMINが設定されている
2マイナス記号「-」の処理:反転して末尾のを削除し、トップに追加(もっと簡単な方法がたくさんあるはず)
3末尾0の処理atoi関数は自分で処理しました
コミットコード
デバッグコード
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
#include
#include
#include
#include
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
",ss.c_str());
printf("%s
",min_num.c_str());
if(x > 0 && ss.size() >= max_num.size() && (ss > max_num)) printf("01
");//return 0
else if(x < 0 && ss.size() >= min_num.size() && (ss > min_num)) printf("02
");//
printf("%d",atoi(ss.c_str()));
}