C++ 为什么数字在C++;?

C++ 为什么数字在C++;?,c++,string,vector,data-structures,long-integer,C++,String,Vector,Data Structures,Long Integer,给定以字符串表示的两个非负整数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) {

给定以字符串表示的两个非负整数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;
     
    }
};
类解决方案{
公众:
向量addToArrayForm(向量&A,整数K){
int i=A.size()-1;
向量结果={};
长整型否=0;
for(int x:A)
{
no=no+x*pow(10,i);
我--;
}
no=no+K;
如果(否==0)
返回{0};
而(否>0)
{
长整型r=no%10;
结果:推回(r);
否=否/10;
}
反向(result.begin(),result.end());
返回结果;
}
};
我在long-long中遇到了这个错误

第9行:Char 14:运行时错误:1e+19超出“long long”(solution.cpp)类型的可表示值的范围
小结:未定义的行为程序:未定义的行为程序已加入。cpp:18:14

也许初始化
std::vector result
将解决您的问题。因为你把它定义为一个整数,但是你把它定义为一个长变量

或者您可以使用
static\u cast
为正在进行的alegorithm(cppref:)转换类型temprory


免责声明:我回答了,因为我不能评论(我没有50个rep)

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


至于1e19是否是一个可能的值,这是因为它取决于作为输入传递的向量
a
的大小。您可能希望通过添加对的检查,将算法限制为只接受某个大小的
A

A
可以是任意大小。您的编译器告诉您,如果A大于19个元素,此函数将生成溢出。同时请注意,是的,我现在将处理优化的解决方案