7.整数反转

题目链接:https://leetcode-cn.com/problems/reverse-integer

1.思路

记得曾经在洛谷做过,回去翻了下,自己定义了个10000000长度的数组……

先记录数组长度,根据数组长度定义数组,记录各个数对应的位数,再分别乘以10的次方实现反转

2.注意事项

​ 1.先回忆了32位的有符号数的概念(有关原码、反码、补码);

​ 2.在给s赋值时,9*10^10赋值出错,单int是不行的:

​ 整型变量int占4个字节,32位,取值范围是-2^31 - 2^31-1 ,也就是(-2147483648) - (2147483647),若溢出则会循环取值,

​ 也就是2147483648溢出后回到了最小负整数-2147483648,2147483649溢出后变成了-2147483648+1=-2147483647;

详细参考:https://zhuanlan.zhihu.com/p/98674721

而对x取绝对值时,给定数据超过了限制,即int x ,改成long long int 从根源上解决问题

​ 3.再学习学习abs(),pow(),sizeof()……

3.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int reverse(long long int x){
int zf=1;
//int x;
//scanf("%d",&x);
if(x>0) zf=1;
if(x<0) {x=(-1)*x;zf=0;}
int w=x,i=0,h=x;
while(w)
{
w/=10;
i++;
}
int sz[i+1],t=0;
long long int s=0;
for(int j=i;j>0;j--)
{
sz[j]=h%10;
h=h/10;
t=pow(10,j-1);
s=s+sz[j]*pow(10,j-1);
}
if(zf==0) s=-s;
//printf("%lld",s);
if(s>pow(2,31)-1 || s<(-1)*pow(2,31)) return 0;
else return s;
}

作者

inanb

发布于

2020-11-21

更新于

2020-11-21

许可协议


:D 一言句子获取中...