【问题标题】:Leetcode Q9 Palindrome Number same code works in Java but not in C++Leetcode Q9 Palindrome Number 相同的代码在 Java 中有效,但在 C++ 中无效
【发布时间】:2022-11-05 02:54:29
【问题描述】:

我尝试解决这个问题:https://leetcode.com/problems/palindrome-number/ 使用代码:

class Solution {
public:
    bool isPalindrome(int x) {
        int rev = 0;
        int temp = x;
        while(temp != 0 && temp > 0){
            rev = rev* 10;
            rev = rev + temp%10;
            temp = temp/10;
        }
        if (rev == x){
            return true;
        }
        else{
            return false;
        }
    }
};

并在 C++ 中出现此错误:

Line 7: Char 22: runtime error: signed integer overflow: 998765432 * 10 cannot be represented in type 'int' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:16:22

但是,逻辑上相同的代码在 Java 中运行完美。 java 和 c++ 都具有 int 数据类型,范围从 - 2^31 到 2^31-1 (资源: https://www.tutorialspoint.com/cplusplus/cpp_data_types.htm, https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html#:~:text=int%3A%20By%20default%2C%20the%20int,value%20of%20232%2D1.) 那么为什么会出现这个错误,我该如何解决呢? 谢谢

【问题讨论】:

  • int 在 java 中是 32 位,在 C++ 中它是平台定义的(可能只有 16 位)。尝试将 int rev 转换为 long rev

标签: java c++ palindrome


【解决方案1】:

您收到此错误是因为 9,987,654,320 太大而无法放入 32 位整数。

解决方案:改用long long。那是:

long long rev = 0;
long long temp = x;

另外,我建议明确指定参数x 的类型。

【讨论】:

    【解决方案2】:
    public class Solution {
    public bool IsPalindrome(int x) {
      if(x==0){
          return true;
      }
      if(x<0 || x%10 ==0){
          return false;
      }
    
      var mylastIndex = 0;
      while(x> mylastIndex)
      {
          var lastNumber = x%10;//1
          x/=10;//12
          mylastIndex = mylastIndex*10+lastNumber;//1
    
      }
    
      if(x==mylastIndex || x==mylastIndex/10){
          return true;
      }
      else{
          return false;
      }
        
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 1970-01-01
      • 2021-02-11
      • 2021-07-13
      • 2021-12-09
      • 1970-01-01
      • 2019-11-11
      • 2021-06-06
      • 2012-09-21
      相关资源
      最近更新 更多