【问题标题】:Why number is getting out of long long range in C++?为什么数字在 C++ 中超出了长期范围?
【发布时间】:2020-10-01 08:02:09
【问题描述】:

给定两个非负整数 num1 和 num2 表示为字符串,返回 num1 和 num2 的和。

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K) {
     int i=A.size()-1;
     vector<int> result={};
     long long int no=0;
      for(int x:A)
      {
          no=no+x*pow(10,i);
          i--;
      }
      no=no+K;
      if(no==0)
          return {0};
      while(no>0)
      {
          long long int r=no%10;
          result.push_back(r);
          no=no/10;
      }
     reverse(result.begin(),result.end());
     return result;
     
    }
};

我收到这个错误很长。

第 9 行:字符 14:运行时错误:1e+19 超出“long long”类型的可表示值范围 (solution.cpp) 摘要:UndefinedBehaviorSanitizer:undefined-behavior prog_joined.cpp:18:14

【问题讨论】:

标签: c++ string vector data-structures long-integer


【解决方案1】:

假设long long是由一个有符号的64位整数实现的,那么1e19确实超出了该类型的正数范围。该类型的最大可表示值为 9223372036854775807。

至于 1e19 是否是可能的值,这是因为它取决于您作为输入传递的向量 A 的大小。您可能希望通过添加对std::numeric_limits&lt;long long&gt;::digits10 的检查来限制您的算法只接受最大一定大小的A

【讨论】:

    【解决方案2】:

    也许初始化std::vector&lt;long long int&gt; result 会解决你的问题。因为您将其定义为整数,但您将 long long 变量推回。

    或者您可以使用static_cast&lt;type&gt; 为正在进行的算法转换临时类型(cppref:static_cast

    免责声明:我回答了,因为我无法发表评论(我没有 50 个代表)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 2022-11-25
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多