如何扭转一个数字?
例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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我输入1534236469时,它会输出1056389759,这是错误的.你觉得我的节目怎么样?谢谢.
你的程序无法给出正确答案的一个原因是你存储result在一个int但你希望能够反转数字1534236469.正确答案是9646324351,但是这个数字大于最大可能的值,int
所以你最终用别的东西.尝试long long或尝试使用不超过9位数的输入.
后续:
我建议long long因为这将相当可靠地给你一个8字节的整数.您可能还会获得8个字节long,具体取决于您构建代码的位置,但32位Windows上的Visual C++(例如)将只提供4个字节.可能这个4字节的长度很快就会成为2字节int的方式,但是在这个时候我们中的一些人仍然需要处理它.
您可以写 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12253 次 |
| 最近记录: |