Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
题目中给出了提示,刚看到这道题确实没有考虑越界
此题的关键在于int 型大小为-2147483648~2147483647,要考虑反转后的结果是否在其中
由于传入的值有负,在程序的最前面直接就写了一个将负转为正的语句,忘记了-2147483648不能用正表示,被leetcode检测出来了,修改后程序如下
int reverse(int x) {
int a[10],i,k,flag=0;
char str[10];
for(i=0;i<10;i++){
if(i>0){
x=x/10;
}
a[i]=x%10;
}
if(a[9]!=0){
for(k=0;k<10;k++){
if(a[k]<0){
a[k]=-a[k];
flag=1;
}
str[k]=a[k]+'0';
}
if(flag==0){
if(strcmp(str,"2147483647")>0){
return 0;
}
}else{
if(strcmp(str,"2147483648")>0){
return 0;
}
for(k=0;k<10;k++){
a[k]=-a[k];
}
}
}
while(a[--i]==0);
x=0;
k=i;
i=0;
while(i<=k){
x+=a[i];
i++;
if(i<=k){
x*=10;
}
}
return x;
}