题目描述

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

解题思路

利用 / 和 % 进行运算。比如 123 -> 321

123/10=12

123%10=3

设temp=0;

x=123;

第一次循环:

temp=temp*10+x%10

=3

x=x/10

=12

第二次循环:

temp =3*10+2

=32

x=1

第三次循环:

temp=321

x=1/10=0;

c语言中1%10=1怎么理解?
%在C语言中是一个取余数的符号
在本题中1%10就是1/10后取余数,而1不够除以10,所以取商等于0,根据余数=被除数-除数*商=1-10*0=1,即得余数为一
所以输出1

 所以当x=0时 ,输出temp 即为翻转数。

代码

 #include "stdafx.h"
#include "stdlib.h" int _tmain(int argc, _TCHAR* argv[])
{
int reverse(int x);
int num ,reverseNum;
scanf("%d",&num);
reverseNum=reverse(num);
printf("%d", reverseNum);
system("pause");
return ;
} int reverse(int x)
{
int temp=;
while(x%!=||x/!=)
{
if(temp<-||temp>)
{
return ; }
temp=temp*+x%;
x=x/;
}
return temp;
}

补充1:溢出问题:

对于正数,反码,补码与原码相同。
对于负数,补码是原码的符号位不变,数值部分按位取反再加1。

short型数据是16位表示最高位是符号位,所以只有15位表示数值,15位000000000000000-111111111111111表示的范围是0-32767,又加上最高位的符号位(第16位),就可以表示-32768-32767 。unsigned short型数据是16位都用来表示数值,16位0000000000000000-1111111111111111表示的范围是0-65535。
计算机在进行计算时是用补数计算的,且如果溢出会进行丢位处理。如short型32767补码是0111111111111111 加1后为1000000000000000(注意最高位是符号位),1000000000000000正是-32768的补数。
而unsigned short型数据无符号65535为1111111111111111(16位),加1后为10000000000000000(17位)这时计算机判断溢出后丢弃第17位,变为0000000000000000就是0了

补充2:溢出和取值范围

 

《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。

double与int类型的存储机制不同,long int的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比int能表示的数据范围更广。

long long在win32中是确实存在,长度为8个字节;定义为LONG64。 
为什么会出现long int呢?在win32现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。 
即便是long long,在TI的有款平台中,长度为5也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型的假象长度。

类型名称        字节数    取值范围
signed char 1 -128~+127
short int 2 -32768~+32767
int 4 -2147483648~+2147483647
long int 4 -2147483648~+2141483647
long long long int 8 -9223372036854775808~+9223372036854775807
unsigned int  (unsigned long)
4字节8位可表达位数:2^32=42 9496 7296
范围:0 ~ 42 9496 7295 (42*10^8) int (long)
4字节8位可表达位数:2^32=42 9496 7296
范围:-21 4748 3648 ~ 21 4748 3647 (21*10^8) long long (__int64)
8字节8位可表达位数:2^64=1844 6744 0737 0960 0000
范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16) unsigned long (unsigned __int64)
8字节8位可表达位数:2^64=1844 6744 0737 0960 0000
范围:0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

最大值、最小值

在#include<climits>存有各个类型的最大值和最小值
CHAR_MIN       char的最小值
SCHAR_MAX      signed char 最大值
SCHAR_MIN       signed char 最小值
UCHAR_MAX      unsigned char 最大值
SHRT_MAX       short 最大值
SHRT_MIN       short 最小值
USHRT_MAX      unsigned short 最大值
INT_MAX       int 最大值
INT_MIN        int 最小值
UINT_MAX       unsigned int 最大值
UINT_MIN       unsigned int 最小值
LONG_MAX      long最大值
LONG_MIN       long最小值
ULONG_MAX      unsigned long 最大值
FLT_MANT_DIG    float 类型的尾数
FLT_DIG        float 类型的最少有效数字位数
FLT_MIN_10_EXP   带有全部有效数的float类型的负指数的最小值(以10为底)
FLT_MAX_10_EXP    float类型的正指数的最大值(以10为底)
FLT_MIN        保留全部精度的float类型正数最小值
FLT_MAX        float类型正数最大值

自己推算:

以int类型为例: 
int为4字节32位,其中首位用0表示正数,用1表示为负数。因此对于 
最大正数可以表示为:0x7fff ffff(7的二进制为0111,f二进制为1111) 
最大负数(-1)可以表示为:0xffff ffff 
最小负数可以表示为:0x8000 0000(8的二进制为1000)

补充3:

INT_MIN在标准头文件limits.h中定义。

1 #define INT_MAX 2147483647
2 #define INT_MIN (-INT_MAX - 1)//这里没有简单地将INT_MIN赋值成-2147483647,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的,
所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。

在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

C中int类型是32位的,范围是-2147483648到2147483647 。 
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; 
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; 
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; 
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。


<每日 1 OJ> -LeetCode 7. 整数反转的更多相关文章

  1. 前端与算法 leetcode 7. 整数反转

    目录 # 前端与算法 leetcode 7. 整数反转 题目描述 概要 提示 解析 解法 算法 传入测试用例的运行结果 执行结果 GitHub仓库 # 前端与算法 leetcode 7. 整数反转 题 ...

  2. Java实现 LeetCode 7整数反转

    7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: ...

  3. Leetcode 7. 整数反转(待整理)

    1.题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: ...

  4. 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...

  5. 【一起刷LeetCode】整数反转

    前言&絮叨 别人都忙着参加年会晒奖品,我却忙着写代码.每逢年底都要安排几个紧急项目,我什么时候能摆脱这种宿命. 在忙也不能忘记刷LeetCode,毛毛向前冲!!! 题目描述 给出一个 32 位 ...

  6. [LeetCode] 7. 整数反转

    题目链接:https://leetcode-cn.com/problems/reverse-integer/ 题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 ...

  7. LeetCode:整数反转(Reserve Integer)

    public class ReserveInteger { public int reverse(int x) { //用于接收个位数(10的余数) int remainder; //是否负数 int ...

  8. 力扣(LeetCode)整数反转 个人题解

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...

  9. [LeetCode]7. 整数反转(Java)

    原题地址: reverse-integer 题目描述: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  ...

随机推荐

  1. python基础流程控制

    流程控制主要分为三大类: 1.if 判断语句 2.while 循坏语句 3.for 循坏语句 下面以举例说明: if 判断语句: user1 = 'seven' user2 = 'alex' pass ...

  2. Java自学-面向对象 类和对象

    Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必 ...

  3. CSS揭秘-半透明边框与多重边框

    场景一: 实现半透明边框: 由于CSS样式的默认行为,背景色的渲染范围是 content+padding+border. 半透明边框被主调色影响, 实现的效果为   解决方案: 使用backgroun ...

  4. ES6 字符串&正则表达式

    目录 第二章 字符串和正则表达式UTF-16码位codePointAt()方法String.fromCodePoint()方法normalize()方法正则表达式u修饰符其他字符串变更字符串中的字串识 ...

  5. Vue学习之监听methods、watch及computed比较小结(十一)

    一.三者之间的对比: 1.methods方法表示一个具体的操作,主要书写业务逻辑: 2.watch:一个对象,键是需要观察的表达式,值是对应回调函数.主要用来监听某些特定数据的变化,从而进行某些具体业 ...

  6. JavaScript 之 定时器

    JavaScript 里面有两个定时器:setTimeout() 和 setInterval() . 区别: setTimeout():相当于一个定时炸弹,隔一段时间执行,并且只会执行一次就不在执行了 ...

  7. Object-C与标准C/C++混合编程

    转自:http://www.xue5.com/Mobile/iOS/661674.html 如何将C++和Object-C混合编程开发IOS软件(Object-c调用C++) 原文网址:http:// ...

  8. Docker搭建Showdoc

      基础安装 安装前请确保你的环境已经装好了docker docker pull star7th/showdoc #新建存放showdoc数据的目录 mkdir /opt/showdoc mkdir ...

  9. 阿里云ECS-使用putty产品psftp工具上传下载

    本人windows10,安装了winscp3,原本可以简单易用,但天空不作美,死活不让我连接,无奈,只能换命令行方式, 好在,putty提供了一个小工具,psftp,不过,需要去官网下载完整版才有哦, ...

  10. 数据科学:pd.DataFrame.drop()

    一.功能 删除集合中的整行或整列: 二.格式 df.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=Fa ...