2020.12.03日,记

第一次写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…谨以此纪录我加入这个社区的第一次尝试,希望自己在这个社区也能成为他们一样的人,从小白做起,慢慢进步。

就这样,晚安。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值