[英]main() not executing, but compiling
我有這個簡單的程序:
// 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;
}
使用g++ -O2 -c -o prob3.o prob3.cpp
證明是成功的,但是當我運行它時我什么都沒看到它只是繼續運行而且我最終g++ -O2 -c -o prob3.o prob3.cpp
Ctrl-C(強制殺死)它。 當我嘗試添加
int main(int argc, const char* argv[])
{
cout << "Test\n";
對於程序, Test
也沒有打印出來。 這就像我的程序根本沒有執行。
任何幫助或建議表示贊賞!
我忘記了從2開始的素數。改為for (int i = 1
to for (int i = 2
。
那些嵌套循環將永遠循環。 內部for
循環只會因為break
而執行一次,因此它只會執行num /= 1
。 這意味着num
永遠不會減少,所以num > 1
永遠不會是false。 我想你只需要等待更長時間!
您沒有看到“測試”的原因可能是因為您沒有刷新輸出。 嘗試:
std::cout << "Test" << std::endl;
你的程序只是運行。 執行需要很長時間。
對於cout << "Test\\n";
,這是cout
流未被刷新的問題:你寫入流的內容仍然在你的程序存儲器中,還沒有刷新到要打印的系統。
你有沒有試過從2開始你的狀態? 如果從1開始,模塊功能沒有意義。
if(!(num%i))
Num / 1給0,所以你沒有輸入if條件
你的循環是一個無限循環。 你找到的第一個因素是1(因為num % 1
是0
),因此你將num
除以1
,這導致num
重新進入for循環,它會一次又一次地執行相同的操作。
同樣使用此修復(在循環中使用2
初始化i
),內部for循環很可能是無限循環和/或導致UB。 否則(正如其他人所述)它“只是”運行很長時間。 對於不同的情況(假設這里最常見的平台)。 這取決於您嘗試計算的值,如果第一個因子小於std::numeric_limits<int>::max()
那么這不適用。 讓我們稱之為素數BIGPRIME
( 600851475149
就是一個很好的例子)。
long long int
大小至少為64位。 在大多數平台上int
不太可能大於32位,所以當你的平台上不大於它時,它只能達到std::numeric_limits<int>::max()
,這是(再次假設這里是常見的32位平台) 2147483647
然后在與long long int
的比較中被提升,但保持其值,該值始終小於BIGPRIME
。 總是增加i
永遠不會到達任何地方,一旦你在max()
你輸入UB land,因為有符號整數不包含在C ++中。 你的代碼可能在那里無限循環,或做一些事情,如記錄-1
作為有效因素,或讓你懷孕。
您可以通過添加一些來輕松觀察
if( 0 == (i%100000000)){ std::cout << i << std::endl; }
進入for
循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.