7. 整数反转
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 x) {
// 判断是否为负数
bool isNegative = (x < 0);
// 将整数转换为字符串
string str = to_string(x);
// 反转字符串
std::reverse(str.begin(), str.end());
try {
// 将反转后的字符串转换回整数
/*如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。这里INT_MIN反转后超出了INT_MAX,会发生溢出!!!*/
int result = stoi(str);
// 如果原整数是负数,则结果也是负数
return isNegative? -result : result;
} catch (const out_of_range& e) {
return 0; // 转换失败或溢出时返回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.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;
}
};
分类:
力扣
, 数据结构与算法 / 字符串
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了