给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
%在C语言中是一个取余数的符号
在本题中1%10就是1/10后取余数,而1不够除以10,所以取商等于0,根据余数=被除数-除数商=1-100=1,即得余数为一
所以输出1
首先原理是整数取模即为个位数;整数除以10即为除去个位数的剩余数
想到的先将不管几位数,一个个存入数组,再反转过来,最后数组转int。
while(k)
{
a[i]=k%10;
k/=10;
i++;
}
for(j=0;j<i;j++)
k+=a[j]*pow(10.0,i-j-1);
return k;
}
还没想好如何实现,后期来改。
如下解答已通过编译
class Solution {
public int reverse(int x) {
//存放结果
int rev = 0;
while (x != 0) {
//每次取最后一位数
int temp = x % 10;
//每次取完最后一位后取剩余数字
x /= 10;
//溢出零界点判断 范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && temp > 7))
return 0;
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && temp < -8))
return 0;
rev = rev * 10 + temp;
}
return rev;
}
}