1.题目介绍
2.题解
2.1 转换为字符串反转问题
1.使用to_string()转化为字符串+reverse()反转+stoi()转化为整数+try catch处理溢出
//
// Created by trmbh on 2023-10-21.
//
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
class Solution {
public:
int reverse(int num) {
bool flag = true;
std::string str = std::to_string(num);
if (num < 0) {
flag = false;
str.substr(1);
}
std::reverse(str.begin(), str.end());
try {
num = std::stoi(str);
return (flag ? num: -num);
} catch (const std::out_of_range& e) {
// 处理溢出
return 0;
}
}
};
int main(){
int num;
Solution solution;
std::cin >> num;
std::cout << solution.reverse(num)<<std::endl;
}
2.使用istringstream流
关于istringstream流的基本用法,请参考 https://www.cnblogs.com/trmbh12/p/17779547.html
这里巧妙使用istringstream流的概念:
- 如果提取成功,该表达式的值将是 iss 对象(即 iss 对象本身被视为 true)。
- 如果提取失败,例如因为输入不是有效的整数,那么 iss 对象将进入错误状态,并且该表达式的值将是 false,而不是0。这意味着 if (iss >> num) 将为 false,表示提取失败,而不会将0赋给 num。
class Solution {
public:
int reverse(int num) {
bool flag = true;
std::string str = std::to_string(num);
if (num < 0) {
flag = false;
str.substr(1);
}
std::reverse(str.begin(), str.end());
std::istringstream iss(str);
if(iss >> num) return (flag ? num : -num);
else return 0;
}
};
2. 数学方法(求余)
思路很简单,就是不断求余相加
代码
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/reverse-integer/solutions/755611/zheng-shu-fan-zhuan-by-leetcode-solution-bccn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:std,return,reverse,int,反转,整数,num,str
From: https://www.cnblogs.com/trmbh12/p/17779596.html