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
提升到某个函数的幂)您不需要使用浮点函数。只需像1long-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;
}