为什么我无法进行此转换?

时间:2013-04-10 14:09:34

标签: c++ io

我有以下代码用于读取输入文件并将该输入转换为整数。它适用于一些输入,但它不再起作用,这让我感到困惑。 (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)

并且无法转换。

这是否超过长整数的大小

2 个答案:

答案 0 :(得分:6)

是的,确实如此。根据{{​​3}}标题,long的最大值为 2147483647 (2 ^ 32/2 - 1)。

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

  • long long
  • __的int64
  • 的int64_t

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

修改 我最初建议将double作为long long的替代,但 Brian 在评论中指出,对于素数因子化来说,这可能是一个糟糕的想法,它本质上是一个整数运算。所以从记录中删除它并坚持使用模拟整数的东西。

答案 1 :(得分:2)

  

这是否超过长整数的大小

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