LeetCode小白菜笔记2:Reverse Integer

LeetCode小白菜笔记[2]:Reverse Integer7. Reverse Integer [Easy]

题目:

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

1

2

Example 2:

1

2

Example 3:

1

2

Note:

Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

题目要求为给一个32bit的signed int,将它按十进制位翻转。并且当翻转后的高位有0的时候不显示0。而且当溢出时返回0。

基本思路如下,两个任务:

按位翻转

判断溢出

先做按位翻转,首先,要由低到高逐个取出每一位上的数值;然后,将取出的值由高到低排列起来。取每一位的数值的方法就是先除若干次10,将要取的位置放到最低位,然后模10将数字取出来。

判断溢出的方法:由于我们的返回值是从高位到低位排起来的,可以看作每次将已有的值左移一位,并在末尾加上新取出的值。左移即乘以10,加上末尾的值后可能溢出。由于overflow实际上丢失了信息,即不可逆,所以每做完一次后。都减去末尾的值并除以10,判断是否与之前的一致,如果不一致,则溢出,否则说明没有溢出。

为了说明溢出问题,用C代码实现。因为python如果原来的类型溢出的话会自适应的调整,比如:

1

2

3

4

5

6

C代码实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

结果:

再用Python实现,这时候判断溢出采用直接与32bit的有符号数的取值范围比较决定。代码和结果如下:

勉强通过的样子。。。

python对于负数的模运算%和整除运算和C不一样啊…这是python的结果:

所以还要转成正数才能进行按位取值,而C不一样:除运算符号相同为正,相异为负,模运算的正负和被除数一样。比如:

-3/16=0, 16/-3=-5, -3%16=-3, 16%-3=1

对于被除数时负数的情况,C的余数为负,而Python的余数始终是正的,而整除又是通过减去余数算的,因此出现了偏差。

总结

不同语言对有些运算处理不一样,需要注意。

习惯了Python和Matlab等,用C的时候常常忘记先定义后使用,还忘记分号….这是不吼滴。

THE END

星期六, 09. 十二月 2017 11:16下午

本文来自企鹅号 - 兔角与禅媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1791 线段覆盖

题目描述 已知数轴上0<N<10000条线段。每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义。端点坐标在(-999,999)内,坐标为整数。有些线...

2634
来自专栏从零开始学 Web 前端

unsigned/signed int/char类型表示的数值范围

我们知道,在计算机内部数值一律使用补码存储。正数的补码与原码一致,负数的补码是符号位为1,其余位是该负数的绝对值按位取反后加1得到。

702
来自专栏架构之路

斐波那契查找原理详解与实现

最近看见一个要求仅使用加法减法实现二分查找的题目,百度了一下,原来要用到一个叫做斐波那契查找的的算法。查百度,是这样说的: 斐波那契查找与折半查找很相似,他是根...

3588
来自专栏数据结构与算法

BZOJ3585: mex(主席树)

Description   有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。 Input   第一行n,m...

4049
来自专栏吾爱乐享

java之学习Random类的概述和注意事项

813
来自专栏吴伟祥

位运算 原

举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空...

752
来自专栏Java技术栈

神奇,教你用随机数打印hello world

下面是一段随机数程序。 public static void main(String[] args) { System.out.println(rand...

3405
来自专栏数据结构与算法

1002. 三角形 (

题目描述 输入三角形三边长a,b,c(保证能构成三角形),输出三角形面积。 输入 一行三个用一个空格隔开的实数a,b,c,表示三角形的三条边长。 输出 输出三角...

2856
来自专栏前端儿

最长公共子序列

咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。 tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longes...

901
来自专栏数据结构与算法

洛谷P2759 奇怪的函数(log 二分)

491

扫码关注云+社区