题目描述:
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。