How to convert a vector of digits to a number in C++

1 Answer

0 votes
#include <iostream>
#include <vector>
#include <string>
#include <numeric>

// ------------------------------------------------------------
// digitsToNumberMath
// Pure mathematical folding (no string operations).
// Example: [1,2,3,4] → 1234
// ------------------------------------------------------------
int digitsToNumberMath(const std::vector<int>& digits) {
    int n = 0;
    
    for (int d : digits) {
        n = n * 10 + d;
    }
    
    return n;
}

// ------------------------------------------------------------
// digitsToNumberString
// Converts digits to strings, concatenates, then parses.
// Example: [1,2,3,4] → "1234" → 1234
// ------------------------------------------------------------
int digitsToNumberString(const std::vector<int>& digits) {
    std::string s;
    
    for (int d : digits) {
        s += std::to_string(d);
    }
    
    return std::stoi(s);
}

// ------------------------------------------------------------
// digitsToNumberAccumulate
// Functional style using std::accumulate.
// ------------------------------------------------------------
int digitsToNumberAccumulate(const std::vector<int>& digits) {
    return std::accumulate(
        digits.begin(), digits.end(), 0,
        [](int acc, int d) { return acc * 10 + d; }
    );
}

int main() {
    std::vector<int> digits = {4, 6, 3, 9, 1, 2};

    std::cout << "Using math:       " 
              << digitsToNumberMath(digits) << "\n";

    std::cout << "Using string:     " 
              << digitsToNumberString(digits) << "\n";

    std::cout << "Using accumulate: " 
              << digitsToNumberAccumulate(digits) << "\n";
}



/*
run:
  
Using math:       463912
Using string:     463912
Using accumulate: 463912
  
*/

 



answered May 11 by avibootz
...