给定32位有符号整数,然后将其反转输出。例如:
输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21
给定反转整数范围: [−2^31, 2^31 − 1],即在int的最小值、最大值之间,如果反转整数超过此范围,则返回0。
分析:
首先,特许情况是输入值为0,可以直接输出0。
第二步,因为会后负数出现,先判断是否为负数,留下标记,因为处理数据的过程中,操作正数方便于操作负数,这里利用Math.abs()函数取绝对值。
第三步,反转数据。例如:
1223 取反为 3221
最后一位数 = 1223%10 = 3
倒数第二位数 = 122%10 = 2, 其中122是1223除以10后的数
倒数第三位数 = 12%10 = 2, 其中12是122除以10后的数
倒数第四位数 = 1%10 = 1, 其中1是12除以10后的数
拿到反转的数 31000 + 2100 + 210 + 1 = 3221
可以进一步分析反转的数是怎么来的:
010 + 3 = 3
310 + 2 = 32 3210 + 2 = 322
322*10 + 1 = 3221
反转的数是原数对10取余的余数从个十百位依次向前移动 加上 新的余数
第四步,判断是否超出范围,是则返回0,否则判断符号标记,还原符号。对于还原符号的操作,可以直接加上“-”号,也可以用0减反转后的数,也可以利用Math.negateExact()函数。
public static int reverseData(int x){
int result =0;
if (0==x){
return 0;
}
boolean flag = false;
if (x<0){
flag=true;
}
int item = Math.abs(x);
long afterreverse = 0;
while (item>0){
afterreverse = afterreverse*10+item%10;
item /= 10;
}
if (flag){
afterreverse = 0-afterreverse;
}
if (afterreverse > Integer.MAX_VALUE || afterreverse < Integer.MIN_VALUE) {
result = 0;
} else {
result = (int)afterreverse;
}
return result;
}
网友评论