![](/img/trans.png)
[英]“integer constant is too large for ‘long’ type” when finding largest prime factor
[英]Finding the largest prime factor? (Doesn't work in large number?)
我是C++的初學者,剛看完C++ Primer的第一章。 因此,我嘗試計算最大質因數的問題,我發現我的程序在大小為 10e9 的情況下運行良好,但在 eg600851475143 之后失敗,因為當我將任何大數輸入其中時,它總是返回一個有線數字 eg2147483647。 我知道類似的問題已經被問過很多次,我只是想知道為什么這會發生在我身上。 提前致謝。
PS 我想原因與我的程序的某些部分有關,該部分無法處理大量數據。
#include <iostream>
int main()
{
int val = 0, temp = 0;
std::cout << "Please enter: " << std::endl;
std::cin >> val;
for (int num = 0; num != 1; val = num){
num = val/2;
temp = val;
while (val%num != 0)
--num;
}
std::cout << temp << std::endl;
return 0;
}
您的int
類型是 32 位(就像在大多數系統上一樣)。 帶符號的 32 位二進制補碼值可以存儲的最大值是2 ** 31 - 1
或 2147483647。如果您想知道定義類型限制的常量和/或使用更大的常量,請查看man limits.h
類型(例如, unsigned
基本上可以免費將范圍擴大一倍, stdint.h
/ inttypes.h
中的uint64_t
會將其擴展 84 億倍,並且僅在 32 位系統上花費一些有意義的東西)。
2147483647
不是有線號碼,它的INT_MAX
在climits
header 文件中定義。 當您達到int
的最大容量時,就會發生這種情況。
為此,您可以使用更大的數據類型,例如std::size_t
或unsigned long long int
,它們的最大值為18446744073709551615
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.