c ++ string to boost :: multiprecision :: cpp_int

时间:2016-01-08 00:42:19

标签: c++ boost

我如何将字符串转换为" boost :: multiprecision :: cpp_int"?

我知道如何将字符串转换为普通的int但不知何故,这并不适用于boost,或者我只是不知道如何做到这一点。我很擅长提升。

我的方法是:

我有一个包含50个数字的100个数字的.txt文件,我使用ifstream将它们逐行读入字符串数组。然后我想将数组中的每个字符串转换为cpp_int。然后添加所有100个数字并获得总和。我可以将这100个数字硬编码到我的代码中作为cpp_int [],但我不想这样做。任何帮助将不胜感激:)

[编辑] 感谢无论出于什么原因的downvote。我不希望你们的任何回答。我寻找一个更好的论坛。

1 个答案:

答案 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;