main()没有执行,而是编译

ihs*_* ih 6 c++ runtime compilation

我有这个简单的程序:

// Include libraries

#include <iostream>
#include <string>
#include <vector>

using namespace std;

// Include locals

// Start

#define NUMBER 600851475143

int main(int argc, const char* argv[])
{
    long long int ans = 0;
    long long int num = NUMBER;

    vector<int> factors;

    do
    {
        // Get lowest factor

        for (int i = 1; i <= num; ++i)
        {
            if (!(num % i))
            {
                factors.push_back(i);

                num /= i;
                break;
            }
        }
    } while (num > 1);

    cout << "Calculated to 1.\n";

    int highestFactor = numeric_limits<int>::min();

    for (int i = 0; i < factors.size(); ++i)
    {
        if (factors[i] > highestFactor)
        {
            highestFactor = factors[i];
        }
    }

    ans = highestFactor;

    cout << ans << endl;

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

编译并g++ -O2 -c -o prob3.o prob3.cpp证明是成功的,但是当我运行它时我什么都没看到它只是继续运行而且我最终必须使用Ctrl-C(强制杀死)它.当我尝试添加

int main(int argc, const char* argv[])
{
    cout << "Test\n";
Run Code Online (Sandbox Code Playgroud)

该计划,Test也没有得到印刷.这就像我的程序根本没有执行.

任何帮助或建议表示赞赏!

我忘记了素数从2开始.for (int i = 1改为for (int i = 2.

Jos*_*eld 7

那些嵌套循环将永远循环.内部for循环只会执行一次,因为break它只会这样做num /= 1.这意味着num永远不会减少,所以num > 1永远不会是假的.我想你只需要等待更长时间!

您没有看到"测试"的原因可能是因为您没有刷新输出.尝试:

std::cout << "Test" << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • @ihsoyih只是将内循环中的`1`改为`2`. (4认同)