[毎日]整数問題を反転します

リバース整数

32ビット符号付き整数を与え、あなたはそれぞれ逆に、この整数値を必要とします。

例1:

入力:123
出力:321
例2:

入力:-123
出力:-321
例3:

入力:120
出力:21

注:
我々は、32ビット符号付き整数、[-231 231--1]の[値の範囲を格納することができる環境があると仮定します。整数オーバーフローの後、それは0を返し、逆ならば、この仮説によるとしてください。

図1は、反転文字列
文字列にxは、整数の文字列は、その後、戻り反転、および。

class Solution {
public:
	int reverse(int x) {
		if (x == INT_MIN) {
			return 0;
		}
		if (x < 0) {
			return -reverse(-x);
		}
		long res = 0;
		string str = std::to_string(x);
		string res_str;
		for (int i = str.size() - 1; i >= 0; --i) {
			res_str.push_back(str[i]);
		}
		res = std::atoi(res_str.c_str());
		if (res > INT_MAX) {
			return 0;
		}
		return res;
	}
};

図2に示すように、数学的な方法は、
位置を取り、その後、RESに* 10 +ビット。

class Solution {
public:
    int reverse(int x) {
        if (x == INT_MIN) {
        	return 0;
        }
        if (x < 0) {
        	return -reverse(-x);
        }

        long res = 0;
        while (x > 0) {
        	int e = x % 10;
        	x /= 10;
        	res = res * 10 + e;
        }
        if (res > INT_MAX) {
        	return 0;
        }

        return res;
    }
};

// 下面是评论中的方法
int reverse(int x)
{
    int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
    long rs = 0;//用long类型判断溢出
    for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
    return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}
公開された73元の記事 ウォン称賛90 ビュー40000 +

おすすめ

転載: blog.csdn.net/Hanoi_ahoj/article/details/105280323