特定输入集

时间:2016-08-27 12:39:23

标签: c++ algorithm numbers

我正在尝试编写此问题声明:

  

“给定正整数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

     

分段错误(核心转储)

我认为没有任何理由应该发生。提前谢谢。

2 个答案:

答案 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();
}