C++ 为什么我得到一个大整数的分段错误?

C++ 为什么我得到一个大整数的分段错误?,c++,segmentation-fault,c++14,C++,Segmentation Fault,C++14,我编写了如下代码: #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { long long int n,s,p,q,i; cin>>n>>s>>p>>q; lo

我编写了如下代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    long long int n,s,p,q,i;
    cin>>n>>s>>p>>q;
    long long int a[n];
    a[0] = s%(long long int)pow(2,31);
    for(i=1;i<n;i++)
    {
        a[i] = a[i-1]*p+s%(long long int)pow(2,31);
    }
    long long int count=1;
    for(i=1;i<n;i++)
    {
        if(a[i]!=a[i-1])
        count++;
    }
    cout<<count;
    return 0;
}
问题是hackerrank:

不会对您有任何好处,就像每个人都说最好使用向量一样,您的代码应该如下所示:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    long long int n,s,p,q,i;
    cin>>n>>s>>p>>q;
    vector<long long int> a;
    a.resize(n);
    a[0] = s%(long long int)pow(2,31);
    for(i=1;i<n;i++)
    {
        a[i] = a[i-1]*p+s%(long long int)pow(2,31);
    }
    long long int count=1;
    for(i=1;i<n;i++)
    {
        if(a[i]!=a[i-1])
        count++;
    }
    cout<<count;
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
长整型n,s,p,q,i;
cin>>n>>s>>p>>q;
载体a;
a、 调整大小(n);
a[0]=s%(长整型)功率(2,31);

对于(i=1;i<代码> long long int a[n];< /c> >无效C++,使用它。<代码> long long int [n]在标准C++中,V/LAX:VLAS是不合法的。对于允许这种非标准扩展的实现,堆栈是有限的。在Windows上,默认限制是Linux上的1MB,它的8或10倍。相关的:正如其他人所说,VLAs在C++中无效(使用<代码> STD::向量< /代码>),对于超出内置类型大小的庞大数字,您需要一个类似于“big num”的库。对于按位操作(如将
2
提升到某个函数的幂)您不需要使用浮点函数。只需像
1
long-long-int
中那样使用位移位即可——使用
int64\u t
。它的键入时间较短,并且精确显示了整数范围有多大。其次,对于基于整数的解决方案,不要使用
pow
之类的浮点函数。使用uch函数。无需
调整
向量的大小
。您可以
向量a(n);
并让构造函数为您做一些脏活。
long long int a[n];
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    long long int n,s,p,q,i;
    cin>>n>>s>>p>>q;
    vector<long long int> a;
    a.resize(n);
    a[0] = s%(long long int)pow(2,31);
    for(i=1;i<n;i++)
    {
        a[i] = a[i-1]*p+s%(long long int)pow(2,31);
    }
    long long int count=1;
    for(i=1;i<n;i++)
    {
        if(a[i]!=a[i-1])
        count++;
    }
    cout<<count;
    return 0;
}