0

0

C++ 怎么反转整数 C++ 取模运算反转数字逻辑【代码】

冰火之心

冰火之心

发布时间:2026-01-26 02:27:27

|

157人浏览过

|

来源于php中文网

原创

int反转易溢出,因res*10中间步骤可能越界触发未定义行为;须在乘10前检查res是否超过INT_MAX/10或低于INT_MIN/10,相等时再判个位;-2147483648等边界用例要求条件完备。

c++ 怎么反转整数 c++ 取模运算反转数字逻辑【代码】

为什么 int 反转容易溢出,必须提前判断

直接逐位取模再拼接(res = res * 10 + x % 10)时,res * 10 这一步就可能溢出 —— 即使最终结果合法,中间计算已越界。C++ 对有符号整数溢出是未定义行为(UB),编译器可能优化掉你的判断逻辑。

正确做法是:在乘 10 前检查 res 是否超过 INT_MAX / 10 或低于 INT_MIN / 10;若相等,再单独判断个位是否会导致溢出。

  • if (res > INT_MAX / 10 || (res == INT_MAX / 10 && x % 10 > 7)) return 0;
  • if (res
  • 注意:INT_MAX % 10 == 7INT_MIN % 10 == -8(因为 INT_MIN 是 -2147483648)

std::abs 在反转负数时的陷阱

INT_MIN 调用 std::abs(INT_MIN) 会溢出 —— 因为 INT_MININT_MAX 绝对值大 1(-2147483648 vs 2147483647)。所以不能先取绝对值再反转。

安全做法是统一用 int 类型处理符号:每次取 x % 10(C++ 中负数取模结果符号跟随被除数),然后累加到带符号的 res 中。

立即学习C++免费学习笔记(深入)”;

Facetune
Facetune

一款在线照片和视频编辑工具,允许用户创建AI头像

下载
  • 例如:x = -123x % 10-3,不是 7
  • 保持原符号参与运算,避免 abslong long 等额外类型转换
  • 只要溢出检查到位,全程用 int 就够

完整可运行的反转逻辑(不依赖 long long

以下代码只用 int,通过前置边界检查规避所有溢出风险:

int reverse(int x) {
    int res = 0;
    while (x != 0) {
        int digit = x % 10;
        if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > 7)) return 0;
        if (res < INT_MIN / 10 || (res == INT_MIN / 10 && digit < -8)) return 0;
        res = res * 10 + digit;
        x /= 10;
    }
    return res;
}

关键点:

  • 每次循环只做一次取模、一次除法、一次乘加,无冗余操作
  • 边界检查放在更新 res 前,覆盖正负两种溢出路径
  • 不用 string 或额外容器,空间 O(1),时间 O(log n)

测试时最容易漏掉的两个用例

很多实现能过常规数据,但栽在这两个上:

  • reverse(1534236469) → 应返回 0(反转后 9646324351 > INT_MAX
  • reverse(-2147483648) → 应返回 0(即 INT_MIN,其绝对值无法表示为 int,且反转后也溢出)

这两个用例直击取模逻辑和溢出判断的完整性 —— 少一个条件分支,就挂。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

401

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

770

2023.08.22

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

401

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

543

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

C++类型转换方式
C++类型转换方式

本专题整合了C++类型转换相关内容,想了解更多相关内容,请阅读专题下面的文章。

299

2025.07.15

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

42

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

46

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号