c++ - Pelanggaran segmentasi berlaku apabila melakukan sprime USACO
PHP中文网
PHP中文网 2017-07-06 10:35:02
0
1
4024
/*
ID: hywhuan1
LANG: C++
TASK: sprime
*/
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <sstream>
using namespace std;
const int maxn = 100000000;
int p[100000008], in, out;
int check(int n)
{
    string ss, st;
    stringstream stream;
    stream << n;
    stream >> ss;
    int len = ss.length();
    for (int i = len; len >= 1; len--)
    {
        st = ss.substr(0, len);
        stringstream stream(st);
        int stnum;
        stream >> stnum;
        if (p[stnum] == 0)
            return 0;
    }
    return 1;
}
ofstream fout("sprime.out");
ifstream fin("sprime.in");
int main()
{
    memset(p, 0, sizeof(p));
    p[2] = 1;
    for (int i = 3; i <= maxn; i += 2)
    {
        p[i] = 1;
    }

    for (int i = 3; i <= maxn; i++)
        if (p[i] == 1)
            for (int j = i + i; j <= maxn; j += i)
            {
                p[j] = 0;
            }

    fin >> in;
    for (int i = pow(10, in - 1); i < pow(10, in); i++)
    {
        if (check(i) == 1)
            fout << i << endl;
    }
    return 0;
}

Saya rasa ini idea yang sangat mudah untuk membuat jadual dahulu dan kemudian membuat pertimbangan Ia berfungsi dengan baik pada Win 10, tetapi ia tidak berfungsi pada USACO

  > Run 1: Execution error: Your program (`sprime') exited with signal
        #11 (segmentation violation [maybe caused by accessing memory out
        of bounds, array indexing out of bounds, using a bad pointer
        (failed open(), failed malloc), or going over the maximum
        specified memory limit]). The program ran for 0.000 CPU seconds
        before the signal. It used 4180 KB of memory. 

Saya betul-betul tak faham sebabnya

Dilampirkan terjemahan bahasa Cina bagi soalan ini: http://www.nocow.cn/index.php...

Selamat datang semua pakar untuk membantu saya, seorang yang lemah, dengan jawapan

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
扔个三星炸死你

Memori telah melimpah. Tatasusunan yang anda buka terlalu besar.

Dianggarkan USACO mengehadkan saiz memori

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan