《leetCode》:Reverse Integer

题目描述:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

实现代码如下:

#include<stdio.h>
#include<stdlib.h>
int reverse(int x) {

    long result=0;//这里设为long型,是为后面检查是否溢出int范围做准备。
    int symbol=1;
    if(x<0){
        x=-x;
        symbol=-1;
    }

    while(x!=0){
        int temp=x%10;
        x/=10;
        result=result*10+temp;

    }
    //判断下result是否只在低31为有数字,高位为0
    if(result>>31){
        return 0;
    }
    else{
        return (int)(symbol*result);
    } 

}

int main(void){
    int num;
    while(scanf("%d",&num)!=EOF){
        int result=reverse(num);
        printf("%d\n",result);
    }
    return 0;
}

这个题比较简单,代码也比较容易写,但是,我也是在本地环境编译运行成功之后提交了两次代码才成功。

第一次,错误具体截图如下:

相信出现这样的报错之后,我们都能够想到原因:溢出了。

那应该怎么解决了。
我的解决方法为

第一步:将结果result设为long类型
第二步:经过翻转之后,将result右移31位之后看是否等于0,若等于零,则没有溢出,否则就是溢出。

小结

在平时的训练中,我们可能不会注意到溢出的问题,但是,在类似于leetCode平台刷题的过程中,我们会收获到这些东西。使我们写出来的程序更加robust。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值