請實現一個反轉32位有符號整數的函式,例如123—>321,-123->-321,120->21,如果溢位就返回0(面試題)
阿新 • • 發佈:2018-12-26
#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(); }