我如何将字符串转换为" boost :: multiprecision :: cpp_int"?
我知道如何将字符串转换为普通的int但不知何故,这并不适用于boost,或者我只是不知道如何做到这一点。我很擅长提升。
我的方法是:
我有一个包含50个数字的100个数字的.txt文件,我使用ifstream将它们逐行读入字符串数组。然后我想将数组中的每个字符串转换为cpp_int。然后添加所有100个数字并获得总和。我可以将这100个数字硬编码到我的代码中作为cpp_int [],但我不想这样做。任何帮助将不胜感激:)
[编辑] 感谢无论出于什么原因的downvote。我不希望你们的任何回答。我寻找一个更好的论坛。
答案 0 :(得分:1)
通过std::string
将每个数字循环读作std::getline
,然后放回std::vector<cpp_int>
。然后用后者计算你的总和。例如:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
int main()
{
std::vector<cpp_int> v;
std::fstream fin("in.txt");
std::string num;
while(std::getline(fin, num))
{
v.emplace_back(num);
}
cpp_int sum = 0;
for(auto&& elem: v)
{
std::cout << elem << std::endl; // just to make sure we read correctly
sum += elem;
}
std::cout << "Sum: " << sum << std::endl;
}
PS:您可以在没有std::vector
的情况下通过您在循环内构建的临时cpp_int
并将其分配给sum
来执行此操作:
std::string num;
cpp_int sum = 0;
while(std::getline(fin, num))
{
cpp_int tmp(num);
sum += tmp;
}
std::cout << "Sum: " << sum << std::endl;