C++ 字符串到 boost::multiprecision::cpp_int

sLw*_*sLw 5 c++ boost

如何将字符串转换为“boost::multiprecision::cpp_int”?

此外,我有一个 .txt 文件,每个 50 位有 100 个数字,我使用 ifstream 将它们逐行读取到字符串数组中。如何将数组中的每个字符串转换为 a cpp_int,然后将所有 100 个数字相加并得到总和?

vso*_*tco 5

要转换单个字符串,请使用cpp_int构造函数:cpp_int tmp("123");

对于文本文件情况,将循环中的每个数字作为std::stringvia读取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;
}
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)