1. 程式人生 > >請實現一個反轉32位有符號整數的函式,例如123—>321,-123->-321,120->21,如果溢位就返回0(面試題)

請實現一個反轉32位有符號整數的函式,例如123—>321,-123->-321,120->21,如果溢位就返回0(面試題)

#include <iostream>
#include <string>
#include <limits.h>        
//解題思路是:首先用一個比32位有符號整數要大的容器來裝這個數字,在這裡我們用的是longlong,
然後我們首先對輸入的數字進行判斷,看它是正還是為負,分別進行處理。

int arr(long long  num)
{
	
	if (num > 0)
	{
		if (num > INT_MAX){                            //進行是否溢位檢查
			return 0;
		}
		std::string a = std::to_string(num);        //to_string將longlong型數值轉換為string
		std::reverse(a.begin(), a.end());           //通過reverse將字串進行翻轉

		long long b = atoll(a.c_str());              //然後在將字串轉換為longlong型數值


		if (b > INT_MAX){
			return 0;
		}
		return b;
	}
	else if (num < 0)
	{
		if (num < INT_MIN){
			return 0;
		}
		num = abs(num);
		std::string a = std::to_string(num);
		std::reverse(a.begin(), a.end());
		long long b = -atoll(a.c_str());
		if (b < INT_MIN)
		{
			return 0;
		}
		return b;
	}

}

int main()
{
	long long a = 0;
	std::cout << "請輸入一個數字" << std::endl;
	std::cin >> a;
	long long b = 0;
	b=arr(a);
	std::cout << "反轉後" << std::endl;
	std::cout<< b;
	getchar();
	getchar();
}