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

fro*_*eas 0 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;
Run Code Online (Sandbox Code Playgroud)

当使用这个小数字时它很好.我尝试了Project Euler问题3中的数字(600851475143)

并且无法转换.

这是否超过长整数的大小

KCh*_*oux 6

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

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

  • 很久很久
  • __int64
  • 的int64_t

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

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