我有以下代码用于读取输入文件并将该输入转换为整数。它适用于一些输入,但它不再起作用,这让我感到困惑。 (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)
并且无法转换。
这是否超过长整数的大小
答案 0 :(得分:6)
是的,确实如此。根据{{3}}标题,long的最大值为 2147483647 (2 ^ 32/2 - 1)。
您可以尝试64位整数类型(最大9223372036854775807),例如
最佳选择可能在某种程度上取决于您的编译器和体系结构。某些在线搜索可能需要找到适合您的设置的类型。
修改强>
我最初建议将double
作为long long
的替代,但 Brian 在评论中指出,对于素数因子化来说,这可能是一个糟糕的想法,它本质上是一个整数运算。所以从记录中删除它并坚持使用模拟整数的东西。
答案 1 :(得分:2)
这是否超过长整数的大小
是。长整数(通常)为4个字节。它只能存储-2,147,483,647和2,147,483,647之间的值。