首页 > 其他分享 >整数反转(C实现)

整数反转(C实现)

时间:2024-10-14 14:48:15浏览次数:7  
标签:10 数字 实现 反转 reversed 整数 INT

题目:

力扣第七题是“整数反转”(Reverse Integer)。题目要求我们给定一个 32 位有符号整数,反转其数字。如果反转后的整数超过了 32 位有符号整数的范围 [-2^31, 2^31 - 1],则返回 0。

解题思路:

  1. 处理正负号

    • 我们首先需要记录输入整数的符号,如果是负数,则最终结果也应该是负数。
  2. 逐位反转数字

    • 将整数的每一位提取出来,然后构建反转后的数字。
    • 使用取模操作 x % 10 来获取数字的最后一位。
    • 使用整除操作 x / 10 来移除数字的最后一位。
  3. 溢出处理

    • 当反转后的数字可能超过 32 位整数的限制时,需要立即返回 0。32 位有符号整数的范围是 [-2147483648, 2147483647]。
    • 我们可以在反转过程中,判断即将构建的新数字是否会溢出。
    • 具体判断方法:在每次添加新的数字之前,检查当前的反转结果是否大于 (INT_MAX / 10) 或小于 (INT_MIN / 10)

编码思路:

  1. reverse 函数声明

    • 函数 reverse 接受一个整数 x 作为输入,返回该整数反转后的结果。
  2. 反转逻辑

    • 通过 x % 10 获取整数 x 的最后一位数字 pop
    • 通过 x /= 10 去除整数 x 的最后一位。
    • 每次将 reversed 乘以 10 并加上 pop,构建反转后的数字。
  3. 溢出检测

    • 检查反转结果是否会溢出。在 32 位有符号整数范围内,正数最大为 2147483647,负数最小为 -2147483648
    • reversed 大于 INT_MAX / 10 时,任何进一步的操作都会导致溢出,因此直接返回 0。同理,处理负数时也需要类似的检测。
  4. 输出示例

    • 输入 123,输出反转的结果 321。
    • 输入 -123,输出反转的结果 -321。
    • 输入 1534236469,由于反转后会超出 32 位整数范围,返回 0。

时间复杂度:

  • 时间复杂度:O(log(x)),其中 x 是输入整数。反转过程中每次都会减少一位,因此时间复杂度与整数的位数成比例。

空间复杂度:

  • 空间复杂度:O(1),只使用了常数个额外空间。
#include <stdio.h>
#include <limits.h>  // 包含 INT_MAX 和 INT_MIN 的定义

int reverse(int x) {
    int reversed = 0;  // 存储反转后的整数

    while (x != 0) {
        int pop = x % 10;  // 提取最后一位数字
        x /= 10;           // 移除最后一位数字

        // 检查是否会发生溢出
        if (reversed > INT_MAX / 10 || (reversed == INT_MAX / 10 && pop > 7)) {
            return 0;  // 溢出,返回 0
        }
        if (reversed < INT_MIN / 10 || (reversed == INT_MIN / 10 && pop < -8)) {
            return 0;  // 溢出,返回 0
        }

        // 更新反转后的数字
        reversed = reversed * 10 + pop;
    }

    return reversed;
}

int main() {
    int x = 123;
    printf("Reversed: %d\n", reverse(x));  // 输出:321

    x = -123;
    printf("Reversed: %d\n", reverse(x));  // 输出:-321

    x = 1534236469;
    printf("Reversed: %d\n", reverse(x));  // 输出:0(溢出)

    return 0;
}

标签:10,数字,实现,反转,reversed,整数,INT
From: https://blog.csdn.net/weixin_48941116/article/details/142918461

相关文章

  • 基于Java+Jsp+Ssm+Mysql实现的在线乡村风景美食景点旅游平台功能设计与实现一
    一、前言介绍:1.1项目摘要乡村风景美食旅游平台的课题背景主要基于我国旅游产业的现状与发展需求。当前,我国旅游产业虽然发展迅速,但仍然存在基础薄弱、管理手段滞后、信息化程度低等问题。旅游行政管理部门的管理方式相对落后,缺乏有效的信息化管理手段,信息沟通渠道不畅,这......
  • 基于Java+Jsp+Ssm+Mysql实现的在线乡村风景美食景点旅游平台功能设计与实现二
    一、前言介绍:1.1项目摘要乡村风景美食旅游平台的课题背景主要基于我国旅游产业的现状与发展需求。当前,我国旅游产业虽然发展迅速,但仍然存在基础薄弱、管理手段滞后、信息化程度低等问题。旅游行政管理部门的管理方式相对落后,缺乏有效的信息化管理手段,信息沟通渠道不畅,这......
  • vue之间的传值问题---7ref实现组件之间传值
    1.父组件向子组件传值:父组件可以通过ref属性获取子组件的实例,进而访问子组件的方法和数据。父组件<template><div><child-componentref="child"></child-component><button@click="sendToChild">SendtoChild</button></div><......
  • vue之间的传值问题---6eventbus 可以实现兄弟组件通信
    1.传递数据的组件:通过eventbus中的方法$emit来发布自定义事件,并且传递数据2.接收数据的组件:通过eventbus中的方法$on来订阅事件,并通过回调函数接收数据//手写发布订阅模式classEventBus{//记录事件和回调clientList={send:[()=>{},()=>{}],}//......
  • 基于Node.js+vue公司员工管理系统的设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的扩大和业务的复杂化,公司员工管理成为了企业管理中的一项重要任务。传统的人工管理方式不仅效率低下,而且容易出错,无法满足现代企业对员工管理......
  • 机器学习_线性回归_岭回归算法预测波士顿房价代码实现(机器学习全流程)(附带数据集hou
    #1.导入外部数据集HousingDataimportpandasaspdboston_data=pd.read_csv(r"C:\Users\鹰\Desktop\ML_Set\HousingData.csv")#数据基本描述print(boston_data.head())print(boston_data.describe())print(boston_data.shape)#2.数据基本处理-缺失值处理,特征值和......
  • 电子邮件如何才能实现加密?
    随着网络技术的迅速发展,人们对网络安全也越来越重视,网路通信技术的发展使得人们的沟通交流更为便捷和多样化,但网路通信安全事件也日益频发多发,成为不容忽视的网络安全问题。电子邮件在我们的生活和工作中扮演了重要角色,而为了保障邮件信息安全,电子邮件签名证书应运而生,成为了保......
  • C语言实现将一个输入的十进制数转换为二进制输出
    一、意义  由于计算机是由一系列电子元件组成的,这些元件只能处理两种状态:开和关。这两种状态可以用二进制表示,其中0代表关闭状态,1代表开启状态。因此,计算机只能存储和处理二进制数。二、原理方法除二取余法是一种将十进制数转换为二进制数的方法。其原理如下:将待转换的......
  • Pytho逻辑回归算法:面向对象的实现与案例详解
    这里写目录标题Python逻辑回归算法:面向对象的实现与案例详解引言一、逻辑回归算法简介1.1损失函数1.2梯度下降二、面向对象的逻辑回归实现2.1类的设计2.2Python代码实现2.3代码详解三、逻辑回归案例分析3.1案例一:简单二分类问题问题描述数据代码实现输出结果3问......
  • Python决策树算法:面向对象的实现与案例详解
    目录Python决策树算法:面向对象的实现与案例详解引言一、决策树算法概述1.1决策树的基本思想1.2分类与回归树1.3决策树的构建过程1.4决策树的优缺点优点缺点二、面向对象的决策树实现2.1类的设计2.2Python代码实现2.3代码详解三、案例分析3.1案例一:鸢尾花分类......