7.整数反转

news2024/9/22 15:45:47

7.整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0

提示:
-231 <= x <= 231 - 1
解题思路
本题如果使用栈的话,就会爆内存,栈最多支持1024,因此不能使用栈(如代码一,就会爆栈),因此用digit = x % 10,x /= 10,rev = rev * 10 + digit进行模拟「弹出」和「推入」数字。题目的数据存在超出int范围后会从正数变化,因此需要满足以下不等式,反之,false。
在这里插入图片描述

代码一(有问题的)

class Solution {
public:
    int reverse(int x) {
        bool flag=false;
        if(x<0)//说明是负数
          flag=true;
        x=abs(x);
        int k=0;
        stack<int> s;
        if(x==0) return 0;
        while(x){
            s.push(x%10);
            x/=10;
            k++;
        }
        int i=1,cnt=1;
        while(cnt<=k){
            x+=i*s.top();
            s.pop();
            i*=10;
            i++;
        }
        if(flag) return -x;
        else return x;
    }
}

代码二

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;
    }
};

代码三(不禁用long的写法)
将整数转换成字符串,再用 long去判断合法与否

class Solution {
public:
    int reverse(int x) {
        // 改成字符数组
        string chars = to_string(x);

        // 有负号则 l = 1,无负号则 l = 0
        int l = (chars[0] == '-') ? 1 : 0;
        int r = chars.size() - 1;

        // 从两侧向中间逼近,交换字符
        while (l < r) {
            swap(chars[l], chars[r]);
            ++l; --r;
        }
        // 先转换为 long long,用来检测是否溢出
        long long reversed = stoll(chars);
        if (reversed > INT_MAX || reversed < INT_MIN) {
            return 0;
        }
        // 再转换为 int
        return static_cast<int>(reversed);
    }
};

代码四
直接转换成long long处理

class Solution {
public:
    int reverse(int x) {
        long long x_ll = static_cast<long long>(x);
        long long ans = 0;

        while (x_ll != 0) {
            int digit = x_ll % 10; // 个位
            x_ll /= 10;
            ans = ans * 10 + digit;
        }
        
        // 溢出则返回 0
        if (ans > INT_MAX || ans < INT_MIN) return 0;
        return static_cast<int>(ans);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux主机网络参数的设置—IP地址的作用和类型

网络参数管理 一.网络参数 主机名&#xff0c;IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS服务器地址 1.配置主机名 hostname命令来查看当前系统的主机名&#xff0c; hosnamectl set-hostname 修改centos7的主机名&#xff0c; 建议以FQDN的&#xff…

顶级 USB 恢复工具探讨:2024 -2025 年最佳 USB 数据恢复

在数字数据与物理文档一样重要的时代&#xff0c;丢失 USB 驱动器中的数据可能是一种令人恐慌的经历。无论是重要的工作文件、珍贵的照片还是重要文档&#xff0c;数据丢失都会以难以想象的方式让您倒退。值得庆幸的是&#xff0c;一些 USB 恢复工具旨在帮助您度过这些可怕的时…

【Delphi】一种生成透明 Icon 图标方法、原理

在程序开发中&#xff0c;我们会遇到制作程序的主图标&#xff0c;windows下程序的图标给是要求是ico格式&#xff0c;也就是常说的Icon。本文介绍一种Delphi利用windos API生成icon的方法。 在制作ico图标的时候&#xff0c;我们需要两幅bitmap图片&#xff0c;一幅我们称作掩…

单片机中的定时器:精确时间的掌控者

在单片机的世界里&#xff0c;定时器就像是一个精确的时间守护者&#xff0c;默默地为各种任务提供准确的时间基准。从简单的定时功能到复杂的实时控制系统&#xff0c;定时器都发挥着至关重要的作用。本文将深入探讨单片机中的定时器&#xff0c;包括其工作原理、应用场景以及…

华为OD机试真题 - 高效货运 - 暴力搜索(Java/Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Java/Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX…

JAVA开源项目 加油站管理系统 计算机毕业设计

本文项目编号 T 003 &#xff0c;文末自助获取源码 \color{red}{T003&#xff0c;文末自助获取源码} T003&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

CTFHub技能树-备份文件下载-网站源码

目录 法一&#xff1a;使用自动化工具扫描 方法二&#xff1a;使用dirsearch目录扫描器扫描 法一&#xff1a;使用自动化工具扫描 import requestsurl1 http://challenge-0e8fe706d11de65e.sandbox.ctfhub.com:10800/ # url为被扫描地址&#xff0c;后不加‘/’# 常见的网…

【论文分享】sIOPMP: Scalable and Efficient I/O Protection for TEEs 24‘ASPLOS

目录 AbstractINTRODUCTIONBACKGROUND and MOTIVATIONDMA AttackIOPMPRelated Work: Other I/O Isolation Mechanisms DESIGN OVERVIEWDesign GoalsPerformanceSecurityScalability Threat ModelPrivilege software attacksMalicious device attacks DETAILED DESIGNMulti-stag…

【C++】智能指针——auto_ptr,unique_ptr,shared_ptr

目录 auto_ptr unique_ptr shared_ptr 并发问题 循环引用问题 个人主页&#xff1a;传送门——>东洛的克莱斯韦克 智能指针的原理&#xff1a;传送门——>智能指针的原理 auto_ptr 使用方法参考官方文档 传送门——>auto_ptr文档 auto_ptr并不是一个优秀的智能…

在线将多张图片拼接起来图工具HTML源码

源码介绍 在线将多张图片拼接成一张图片&#xff0c;多图合一并导出下载。无需本地安装软件。 下载时&#xff0c;使用日期时间作为文件名&#xff0c;规避图片文件名相同造成的覆盖问题&#xff1b;也能省去一部覆盖确认操作 多语言支持 源码截图 源码下载 在线将多张图片…

Xilinx实现对数运算

简介 本章节实现任意底数和真数值的转换,设计中一般有两种实现方法: 1、在外部直接算好对数值,按照数值范围做个表,存在ram里,到时候查表。为了减少表深度,提高资源利用率,可以考虑去掉部分低位数值,损失一定的精度。 2、log10(x)=ln(x) * log10(e) , log10(e)是常数可…

电信500M宽带+AX210无线网卡测速

500M电信宽带&#xff0c;PC的Wifi模块是AX210 一、PC测速 2.4G Wifi 5G Wifi 有线网口 二、 手机端&#xff0c;小翼管家App测速 2.4G Wifi 5G Wifi 结论&#xff1a; 手机上网要快的话&#xff0c;还是要选择5G wifi

【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作

目录 &#x1f354; Linux用户和权限 1.1 Linux 用户相关概念 1.2 用户权限 1.3 文件/文件夹权限的修改 &#x1f354; Linux实用操作 2.1 快捷键 2.2 软件安装/服务启动状态管理/创建软连接 yum install systemctl 对服务进行管理 ln 软连接 2.3 IP 和 主机名 2.4…

华为云征文 | 快速部署华为云Flexus X实例,开启您的云端之旅

需要了解 本文章主要讲述华为云Flexus X实例的介绍&#xff0c;以及在华为公有云平台&#xff0c;购买和配置华为云Flexus X实例的搭建指南选择合适的云服务器&#xff1a; 本文采用的是 华为云服务器 Flexus X 实例&#xff08;推荐使用&#xff09;共有有镜像&#xff1a; Hu…

关于C++的一些使用模版-初阶

一、泛型编程 如何实现一个通用的交换函数呢?,交换的值是两个类型不同的数据。 代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream>//如何实现一个通用的交换函数呢&#xff1f; void swap(int& left, int &right) {int tmp lef…

【拉取Git项目到本地,知识小记,后续再改】

前提&#xff1a;Git已经安装好 https://blog.csdn.net/mukes/article/details/115693833 安装至步骤2.2.4即可 第一步创建本地项目目录 第二步获取他人提供的项目git地址或者自己在网上找的他人项目的git地址 Git 全局设置: git init git config --global user.name “ASxx”…

开点线段树、区间最值和历史最值

1.修改&#xff1a;用到了相应的空间就开&#xff0c;没有用到就不开。cnt拓展节点编号&#xff0c;此时各范围的节点编号不再按照i*2和i*21的对应关系建立 2.查询&#xff1a; 如果查询时一段范围没有建立过&#xff0c;就说明这段范围的累加和就是0 3.空间估计&#xff1a;一…

尚品汇-项目目前存在问题、引入MQ(四十二)

目录&#xff1a; &#xff08;1&#xff09;目前存在的问题 &#xff08;2&#xff09;消息队列解决什么问题 &#xff08;3&#xff09;消息队列工具 RabbitMQ &#xff08;4&#xff09;搭建mq测试环境service-mq 下面我们先做的是前面后台管理系统商品上下架的没完成的…

C++逆向分析之条件语句和循环语句

一.C逆向条件结构基础入门 大家写过相关的算法吗&#xff1f; 加密代码中会涉及循环和分支&#xff0c;你要识别算法&#xff0c;首先就是需要将它的算法处理流程识别出来。当我们还原出等价的高级代码之后&#xff0c;就没有逆向分析人员的事情了&#xff0c;因为接下来涉及…

54. QButtonGroup的基本使用

1. 说明 在使用QT开发小软件时,使用最多的控件也许就是Button按钮了,一般情况下在界面上添加了一个Button,都会为这个Button添加一个相应的信号槽相应其点击事件。那么,如果在软件的其中一个界面添加了很多个Button,比如自定义的侧边菜单栏里可能会放置很多Button控件,如…