[英]Why does the while loop keeps running after I entered the termination parameters?
[英]Why does a code keeps running endlessly after a certain number of iterations?
請考慮此C代碼
void main() {
int i, s = 17;
for (i = 8; i < 2000000; i++) {
if (ifprime(i))
s += i;
}
printf("%d", s);
}
它不會以這個迭代次數運行,但會產生一些迭代次數較少的結果,例如while (i < 200000)
這是為什么?
(請注意,我不是要求解決方案,非常感謝)
這將溢出32位整數。 這是未定義的行為,雖然這通常不會導致程序無休止地運行,但這是可能的,因為當程序顯示未定義的行為時,無法保證會發生什么。 嘗試使用long long
,這至少是64位(對於簽名版本,至少63位和一個符號位)。
long long s = 17;
並以這種方式打印:
printf("%lld", s);
對於所有高達2000000
數字,素數搜索的這種未經優化的版本將需要相當長的時間,所以也許你只是認為它不是在無法運行。 我建議通過像if (i % 1000 == 0) printf("%d %lld\\n", i, s);
這樣的打印進行調試if (i % 1000 == 0) printf("%d %lld\\n", i, s);
進入循環,然后你可以看到它有多遠,是否仍在工作。 對我而言,它正在發揮作用(當然,需要long long
修復)。
因為你知道這是積極的,你可以使用
unsigned long long s = 17;
然后打印出來
printf("%llu",s);
你也可以用它來做我
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.