#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
*/