0

我有以下代码用于读取输入文件并将该输入转换为整数。它适用于某些输入,但它不再起作用,这让我感到困惑。(C++)

ifstream inputfile;

inputfile.open("inputfile.txt"); //openfile and read
string m; //fileforstringinput
getline(inputfile, m); //importing input information
long int s = atol(m.c_str());   //conversion to integer
inputfile.close(); //close file
cout << s;

将其用于小数字时很好。我尝试了 Project Euler 问题 3 中的数字(600851475143)

并且未能转换。

这是否超过了长整数的大小

4

2 回答 2

6

是的,它确实。根据<climits>标头,long 的最大值为2147483647 (2^32/2 - 1)。

您可以尝试 64 位整数类型(最大 9223372036854775807),例如

  • 长长的
  • __int64
  • int64_t

最佳选择可能在某种程度上取决于您的编译器和架构。可能需要进行一些在线搜索才能找到适合您设置的类型。

编辑: 我最初建议double作为 的替代方案long long,但布赖恩在评论中指出,素数分解可能是一个糟糕的主意,因为素数分解本质上是一个整数运算。所以从记录中删除它并坚持使用整数模型。

于 2013-04-10T14:18:11.953 回答
2

这是否超过了长整数的大小

是的。长整数(通常)是 4 个字节。它只能存储 -2,147,483,647 和 2,147,483,647 之间的值。

于 2013-04-10T14:18:29.887 回答