c++ – Bei der Ausführung von USACOs Sprime kommt es zu einer Segmentierungsverletzung
PHP中文网
PHP中文网 2017-07-06 10:35:02
0
1
4006
/*
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中文网

认证高级PHP讲师

Antworte allen(1)
扔个三星炸死你

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

估计 USACO 限制了内存大小

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage