给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围?[?231,??231?? 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
?
我的想法是,先算得数字的位数,用取余,用x依次除以10的次方,当取余为x本身时,十的次方数就为数字的个数;
然后用动态数组,使数组大小与位数一样,然后逐个将每一位数输进数组;
最后逐个输出
int reverse(int x)
{
int *array;
int arrLen,i;
long long y,temp;
for(i=0;i<33;i++)
{
if(i==33)return 0;
temp=pow(10,i);
if(x%temp==x)
arrLen=i;
break;
}
array = (int*)malloc( arrLen*sizeof(int) );
for(i=0;i<arrLen;i++)
{
temp=pow(10,(arrLen-i));
array[arrLen-i]=x%temp;
}
for(i=0;i< arrLen;i++)
y=array[i]*( pow(10, array[ arrLen-i]));
if(x<0) y=-y;
free(array);
return y;
}
?写了那么长的啰里啰嗦的代码,再看看别人的题解,我直接惊为天人
害,return语句用三目运算符,实现"如果反转后整数超过 32 位的有符号整数的范围?[?231,??231?? 1] ,就返回 0。"
然后用数学方法把数字反转
int reverse(int x){
long count=0;
while(x!=0){
count=count*10+x%10;
x=x/10;
}
return count>2147483647||count<-2147483648?0:count;
}
作者:lo_e
链接:https://leetcode-cn.com/problems/reverse-integer
/solution/shu-xue-si-xiang-by-lo_e/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
?
?
|