Java 使用位移位反转数字
我正在试图找到一种方法,在没有Java 使用位移位反转数字,java,numbers,bit-manipulation,reverse,Java,Numbers,Bit Manipulation,Reverse,我正在试图找到一种方法,在没有 将其转换为字符串以查找长度 反转字符串并重新解析它 运行单独的循环以计算长度 我现在是这样做的 public static int getReverse(int num){ int revnum =0; for( int i = Integer.toString(num).length() - 1 ; num>0 ; i-- ){ revnum += num % 10 * Math.pow( 10 ,
public static int getReverse(int num){
int revnum =0;
for( int i = Integer.toString(num).length() - 1 ; num>0 ; i-- ){
revnum += num % 10 * Math.pow( 10 , i );
num /= 10;
}
return revnum;
}
但我想实施上述3个条件
我正在寻找一种方法,可能使用逐位移位运算符或其他类型的逐位操作
可能吗?如果是,怎么做
PS:如果输入1234,则应返回4321。我将只反转整数和长整数如何:
int revnum = 0;
while (num != 0) {
revnum = revnum * 10 + (num % 10);
num /= 10;
}
return revnum;
代码需要非负输入
这可能对您来说很重要,也可能不重要,但值得注意的是,
getReverse(getReverse(x))
不一定等于x
,因为它不会保留尾随的零。这怎么样?它也处理负数
public int getReverse(int num){
int rst=0;
int sign;
sign=num>0?1:-1;
num*=sign;
while(num>0){
int lastNum = num%10;
rst=rst*10+lastNum
num=num/10;
}
return rst*sign;
}
Integer.MAX\u VALUE
或Integer.MIN\u VALUE
在任何解决方案中都不考虑
例如:如果输入为-2147483647
或2147483647
,则o/p将分别为1126087180
和-1126087180
请在处理这两个条件的情况下尝试以下解决方案,因此,如果在任何时间点,数字超出边界条件,即INPUT\u VALUE>Integer.MAX\u VALUE
或INPUT\u VALUE
将返回0
class ReversingIntegerNumber {
public int reverse(int originalNum) {
boolean originalIsNegative = originalNum > 0 ? false : true;
int reverseNum = 0;
int modValue;
originalNum = Math.abs(originalNum);
while(originalNum != 0) {
modValue = originalNum % 10;
if(reverseNum > (Integer.MAX_VALUE - modValue)/10) {
return 0;
}
reverseNum = (reverseNum * 10) + modValue;
originalNum /= 10;
}
return originalIsNegative ? -1 * reverseNum : reverseNum;
}
}
您将如何反转
10000
?只有1
?您将失去“零”。您不太可能找到一种用位运算反转十进制表示法的好方法。“使用位移位”这里绝对没有进行位移位。如果不反转负数,则可以,我将把它转换成正数,然后将其反转,然后再将其转换回负数我想现在不会有太大问题,但如果是这样的话,我可能不得不重新考虑我使用这个函数的目的。我想我会得到同样的问题,即使与前一个implementation@gautham5678:正确:这是函数签名(int
->int
)的一个功能,而不是此实现的一个功能。