如何撤消数字?
示例1:x = 123,返回321 例2:x = -123,返回-321
这是我的答案:
public int reverse(int x) {
int result = 0;
while(x != 0){
result = result * 10 + x % 10;
x = x / 10;
}
return result;
}
但是当我输入1534236469时,它会输出1056389759,这是错误的。你觉得我的节目怎么样?感谢。
答案 0 :(得分:5)
您的计划无法给出正确答案的一个原因是您
将result
存储在int
中,但您希望能够。{
反转号码1534236469。
正确答案是9646324351,
但是这个数字大于int
的最大可能值
所以你最终得到别的东西。
试试long long
或尝试使用不超过9位的输入。
<强>跟进:强>
我建议long long
,因为这会相当可靠地给你
一个8字节的整数。您可能还会在long
中获得8个字节,具体取决于
在哪里构建代码,
但是32位Windows上的Visual C ++(例如)会
只给你4个字节。可能这个4字节的长整数很快就会成为2字节int的方式,但是在这个时候我们中的一些人还是要处理它。
答案 1 :(得分:3)
杰森, 您只需将类型从int更改为long。
public long reverse(long x)
{
long result = 0;
while (x != 0)
{
result = result * 10 + x % 10;
x = x / 10;
}
return result;
}
答案 2 :(得分:2)
你可以写x> 0(虽然不重要)之后你必须考虑负数,我对你的逻辑做了如下更改(也使用long long来避免溢出):
long long reverse(long long x)
{
int sign = 1;
long long ans=0;
if(x < 0)
sign = -1;
x = abs(x);
while(x > 0)
{
ans *= 10;
ans += x%10;
x /=10;
}
return ans*sign;
}
答案 3 :(得分:1)
如何转换为字符串并反转?很简单:
int reverseDigits(int x) {
String s = Integer.toString(x);
for (int i = 0; i < s.length() / 2; i++) {
char t = s[i];
s[i] = s[s.length() - i - 1];
s[s.length() - i - 1] = t;
}
return Integer.parseInteger(s); // subject to overflow
}
答案 4 :(得分:0)
为什么不简单地做:
while (x)
print x%10
x /= 10
如果x的值最初为负,则使用双符号转换,以避免出现什么mod -ve数的问题。
答案 5 :(得分:0)
您使用int存储数字,而数字超出int的范围。你在这个问题上有标记算法。所以,更好的方法是使用链接列表。你可以谷歌更多关于它。有很多算法可以反转链接列表。
答案 6 :(得分:0)
可以使用long类型来存储结果
public int reverse(int x) {
long result = 0;
while (x != 0) {
result = result * 10 + x % 10;
x /= 10;
}
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)
return 0;
return (int)result;
}
答案 7 :(得分:0)
Schultz9999答案的缩短版本:
int reverseDigits(int x) {
String s = Integer.toString(x);
s=new StringBuilder(s).reverse().toString();
return Integer.parseInt(s);
}
答案 8 :(得分:0)
这是反向编号::
的python代码n=int(input('Enter the number:'))
r=0
while (n!=0):
remainder=n%10
r=remainder+(r*10)
n=n//10
print('Reverse order is %d'%r)
答案 9 :(得分:0)
一个紧凑的Python解决方案是
reverse = int(str(number)[::-1])
如果可能出现负数,则
num = abs(number) # absolute value of the number
rev = int(str(num)[::-1]) # reverse the number
reverse = -rev # negate the reverse
答案 10 :(得分:0)
这是在Leetcode上发布的问题,给出的错误答案为0。提示是在返回反向整数之前,我们必须检查它是否不超过32位int的限制,即2 ^ 31 -1。
Python 3中的代码:
class Solution:
def reverse(self, x: int) -> int:
s=[]
rev=0
neg=False
if x==0:
return 0
if x<0:
x=x* -1
neg=True
while x:
s.append(x%10)
x=int(x/10)
i=len(s)
j=0
while i:
rev=rev+s[j]*10**(i-1)
i=i-1
j=j+1
if(rev>2**31-1):
return 0
return rev * -1 if neg else rev
答案 11 :(得分:0)
在JS中,我是这样写的
function reverseNumber(n) {
const reversed = n
.toString()
.split('')
.reverse()
.join('');
return parseInt(reversed) * Math.sign(n);
}