首页 > 编程语言 >C++算法实践06-整数反转

C++算法实践06-整数反转

时间:2024-07-11 18:30:47浏览次数:16  
标签:10 06 C++ 214748364 算法 123 一位数 result ret

一、题目:

给你一个 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

二、思路:

对于整数的反转来说,只需要循环取出最后一位数字,并且每一次都对原来的数字和10取整,直到原来的数字为0跳出循环。对于取出的数字只需要将前一次的乘以10加上这次就完成了翻转。

比如:

12345 取出最后一位数为5 // 0*10+5=5 // 12345/10=1234

1234 取出最后一位数为4 // 5*10+4=54 // 1234/10=123

123 取出最后一位数为3 // 54*10+3=543 // 123/10=12

12 取出最后一位数为2 // 543*10+2=5432 // 12/10=1

1 取出最后一位数为1 // 5432*10+1=54321 // 1/10=0

然而问题的关键在于题目所说的翻转后的溢出问题。32位的整型的最大值位2147483647,但是如果以这个数为判断边界,当倒数第二次翻转后的数字大于214748364后再乘以10就会溢出int的最大数导致代码崩溃。所以我们需要以214748364为判断边界。

只要数字小于214748364,就不会出现溢出问题。但是当数字等于214748364就还需要考虑一种情况。由于214748364乘以10还需要加上最后一个数字,当最后一次提取尾数的值大于7就会出现溢出问题,只要最后一次尾数的值小于7就不会出现溢出。

三、代码:

class Solution {
public:
    int reverse(int x) 
    {
        int result=0;
        int ret=0;
        while(x != 0)
        {
            ret = x % 10;
            if(result>214748364 || (result == 214748364 && ret>7))
            {
                return 0;
            }
            if(result < -214748364 || (result == -214748364 && ret < -8))
            {
                return 0;
            }
            result = result*10 + ret;
            x /= 10;
        }
        return result;
    }
};

标签:10,06,C++,214748364,算法,123,一位数,result,ret
From: https://blog.csdn.net/qq_51497103/article/details/140304157

相关文章

  • WeChat算法(CCD/RQT)08分析
    以上内容来自AI生成,仅供学习研究交流使用CCD(ConstantClientData)CCD在微信的登录过程中的主要作用是通过设备指纹和会话信息来识别和验证设备。具体的实现步骤可能如下:设备指纹收集:收集设备的硬件和软件信息,如设备型号、操作系统版本、浏览器信息、分辨率、时区等。收......
  • 代码随想录算法训练营第六天 | Python | LeetCode242.有效的字母异位词、LeetCode349.
    哈希表理论https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html一般哈希表都是用来快速判断一个元素是否出现集合里。数组/set/mapLeetCode242.有效的字母异位词题目链接:https://leetcode.cn/problems/valid-anagr......
  • 代码随想录算法训练营第四天 | Python | LeetCode24.两两交换链表中的节点、19.删除链
    LeetCode24.两两交换链表中的节点题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/文章/视频链接:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html#%E7%AE%9......
  • C++冒泡排序(使用vector动态数组)
    #include<iostream>#include<vector>usingnamespacestd;voidsort(vector<int>&a){  constintsize=a.size();  inttemp;  intflag=1;  while(flag==1)  {  flag=0;  for(inti=0;i<size;++i)  {   if(a[i]>......
  • 主动算法交易!减持回购/套利/大单拆分/篮子交易/预埋单神器工具!
    主动算法致力于服务机构投资者,为其提供以成交为目的的自动化交易执行。在有限容量内,充分追求客户个性化需求,保证执行效率、降低冲击成本、减少人力成本、保护交易意图、捕捉交易机会、符合监管要求和获取交易环节的ALpha收益。能够帮助解决的问题:1.优化交易成本,降低冲击成......
  • 加密算法详解:对称加密、非对称加密、Hash算法
    对称加密、非对称加密和哈希算法是信息安全中的三种主要加密技术,它们各自有不同的特点和用途:对称加密(SymmetricEncryption)工作原理:使用相同的密钥进行加密和解密。速度:通常非常快,适合大量数据的加密。密钥管理:参与通信双方必须安全地共享密钥,密钥泄露会导致安全风险。主......
  • 代码随想录算法训练营Day11 | 栈与队列基础 232.用栈实现队列 225. 用队列实现栈 20.
    栈与队列栈:先进后出   empty-push-push-pop队列:先进先出Tips: 栈和队列是STL(C++标准库)里面的两个数据结构。STL最旁边的三个版本:HPSTL、P.J.PlaugerSTL、SGISTL232.用栈实现队列题目:232用栈实现队列在python中,in主要负责push,out主要负责pop初始:self.......
  • c++方法
    std::transform方法std::transform是C++标准库算法中的一个非常有用的函数,它定义在头文件中。这个函数用于将给定范围内的每个元素按照指定的操作进行转换,并将转换结果存储在另一个位置(可以是原始范围的另一个容器,或者完全不同的位置)。std::transform提供了一个灵活的......
  • N皇后问题(C++)
    问题描述N皇后问题是一个经典的计算机科学问题,要求在一个N×N的棋盘上放置N个皇后,使得彼此不互相攻击。攻击的定义包括皇后在同一行、同一列或同一对角线上。规则任意两个皇后不能在同一行。任意两个皇后不能在同一列。任意两个皇后不能在同一条斜线上(包括主对角线和副对角......
  • PTA 7-2 数组循环左移--C++
    本题思路:本题可以用数组或者指针来解决问题,本题我们如果我们用数组来解决问题的话,数组循环左移,就相当后面的数组右移过来,如i位置的就相当于i+m的位置的数组,大概这样的思路,就没有问题了#include<iostream>usingnamespacestd;intmain(){intn,m;cin>>n>>m;......