我正在尝试编写此问题声明:
“给定正整数N,找出N2的正整数除数小于N,但不除N.”
它适用于小输入,但是当输入的大小增加时,它的抛出分段就会出错。下面给出了两个测试用例的代码:
代码:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long int n,n2,j=0,count=0;
cin>>n;
n2=n*n;
long arr[n];
for(int i=1;i<n;i++)
{
if(n2%i==0)
{
arr[j]=i;
j++;
}
}
for(int i=0;i<j;i++)
{
if(n%arr[i]!=0)
count++;
}
cout<<count;
return 0;
}
案例1 :(正确)
30
6
案例2:
2226020
分段错误(核心转储)
我认为没有任何理由应该发生。提前谢谢。
答案 0 :(得分:0)
您的代码崩溃了,因为您正在尝试在堆栈上创建一个~8mb的数组。
改为使用堆:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long int n,n2,j=0,count=0;
cin>>n;
n2=n*n;
long *arr = (long*) malloc(n);
for(int i=1;i<n;i++)
{
if(n2%i==0)
{
arr[j]=i;
j++;
}
}
for(int i=0;i<j;i++)
{
if(n%arr[i]!=0)
count++;
}
cout<<count;
free(arr);
return 0;
}
答案 1 :(得分:0)
如上所述,你正在“重载”堆栈,但我建议使用std :: vector而不是数组,避免手动内存管理。
try {
File localFile = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS), "New_Audio.mp3");
localFile .createNewFile();
down.getFile(localFile);
} catch (IOException e) {
e.printStackTrace();
}