《leetCode》:Reverse Integer

来源:互联网 发布:杯装茶 知乎 编辑:程序博客网 时间:2024/06/05 03:23

题目描述:

Reverse digits of an integer.Example1: x = 123, return 321Example2: 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
原创粉丝点击