第一次写blog(-_-)
这道题是我在leetcode做的第一道题(新手上路):
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
(看我第一次写出来的野生代码>_<)
int reverse(int x){
int k,j,sum,tem,max_x,i;
tem=x;
if(x<0) x=-x;
else x=x;
for(i=1;i<=x;i=i*10) { }
max_x=i/10;
for(sum=0,i=1,j=max_x;i<=10*x&&j>0;i=i*10,j=j/10)
{
k=x/i%10;
sum=sum+k*j;
}
if(tem>=0) return sum;
else return -sum;
}
在不考虑溢出的情况下,我的代码貌似还是成功的,但是思路繁琐既不简洁易懂,效率也低。
一旦考虑溢出,我的程序就开始出错了。
后来在评论区的同伴中看到这样一种算法,极其简洁优美。
long n = 0;
while (x)
{
n = n * 10 + x % 10;
x /= 10;
}
return n > INT_MAX || n < INT_MIN ? 0 : n;
(INT_MAX和INT_MIN包含在头文件<limits.h>中)
执行效率很高。
hmmmmm…
至于自己的代码溢出问题,看着官方给出的题目评论,我改过代码,答案也不对,我目前还在思考哪里出了问题。
emmmmmm…谨以此纪录我加入这个社区的第一次尝试,希望自己在这个社区也能成为他们一样的人,从小白做起,慢慢进步。
就这样,晚安。