![](/img/trans.png)
[英]Unique number generation using shift operator and validate same with the bitwise & operator in java
[英]Reversing a Number using bitwise shift
我试图找到一种方法来扭转数字,没有
我目前正在这样做
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_VALUE
或Integer.MIN_VALUE
。
例如:如果输入是-2147483647
或2147483647
则 o/p 将分别为1126087180
和-1126087180
。
请尝试以下解决方案,其中处理两个条件,因此如果在任何时间点数字超出边界条件,即INPUT_VALUE > Integer.MAX_VALUE
或INPUT_VALUE < Integer.MIN_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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.