2016-08-01 26 views
0

我正在嘗試在C++中編寫主要查找程序。我有一個正常運作的計劃,我很高興,但是當我嘗試在數十億美元來計算質數我得到這樣一個錯誤信息:從‘長’到‘廉政’在C++中使用高數字進行計算

「隱式轉換來自10000000001的變化值到141006540​​9「。

即使在數十億的條件下,它的工作速度也相當快,所以我想測試極限,但是這個數字變化會阻止這一點。

+1

一個帶符號的int只能保存一個最大值爲2,147,483,647的值,所以當你從一個long(保持任何更大的值)轉換爲一個int時,你最終會發生溢出。 – Swemoph

+0

你可以使用'uint64_t'來增加到'2^64-1'的邊界。除此之外,你將不得不使用現成的Big-Integer類(或者實現你自己的一個)。順便說一句,你應該顯示你的代碼作爲你的問題的一部分,以便其他人可以在回答時參考它。另外,不能理解C++中變量類型的限制('int','long'等)顯示出缺乏知識。沒有指責,但在發佈問題之前,你需要做一些「配合」工作。這就是說,目前你的問題被認爲是相當低質量的(請不要冒犯) –

回答

1

您需要使用long類型(可以保存比int更大的數字)。 下面是一個例子,如何int會溢出:

int test1 = 10; 
int test2 = test1 * 89000000; 
cout << test2; 

隨着長整數

long test1 = 10; 
long test2 = test1 * 89000000; 
cout << test2; 

結果將是正確的。

0

一個符號整數只能從值範圍「」到「2,147,483,647」和「-1」到「2,147,483,648」,而不是用符號整數使用無符號的,如果你不」 t想要負數,或者如果你想使用負數也比你可以通過使用來實現。