suchen

Heim  >  Fragen und Antworten  >  Hauptteil

c++ – Bei der Ausführung von USACOs Sprime kommt es zu einer Segmentierungsverletzung

/*
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;
}

Ich denke, es ist eine sehr einfache Idee, zuerst eine Tabelle zu erstellen und dann ein Urteil zu fällen. Unter Win 10 funktioniert es gut, aber unter USACO funktioniert es nicht

  > 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. 

Ich verstehe den Grund wirklich nicht

Anbei finden Sie die chinesische Übersetzung dieser Frage: http://www.nocow.cn/index.php...

Begrüßen Sie alle Experten, die mir, einem Schwächling, mit Antworten helfen können

PHP中文网PHP中文网2723 Tage vor3997

Antworte allen(1)Ich werde antworten

  • 扔个三星炸死你

    扔个三星炸死你2017-07-06 10:37:02

    内存溢出了,你开的数组太大了。

    估计 USACO 限制了内存大小

    Antwort
    0
  • StornierenAntwort