将向量数组转换为数字

Converting Vector Arrays to Numbers

我在 C++ 中创建了一个将数字转换为数组的函数。由于这个创建,我还创建了将数组转换回数字的对立面:

int convertToNumber(vector<int> nums) {

    int length{ nums.size() };
    int Pow{ length - 1 };
    int factor{ pow(10, Pow) };
    int tempNum{};
    int result_num{};

    for (auto n : nums) {

        tempNum = n;
        tempNum *= factor;
        result_num += tempNum;
        Pow--;

    }

    return result_num;
}

问题来了。当我 运行 在 main 中使用以下代码时:

int main() {

  vector<int> nums {2, 3, 5, 6, 2, 6};

  int number = convertToNumber(nums);

  cout << number << endl;

}

当我应该得到 235,626 时,我得到了 2,400,000。找了半天也没找到代码中的逻辑错误。有人知道这是怎么回事吗?

循环的每次迭代都会更新 Pow - 但不会更新 factor;循环中使用的是 factor,而不是 Pow.

请记住,当您将一个表达式赋值给一个变量时,该表达式只会被求值一次,而这一次求值的结果就是变量的设置值。也就是说,并不是每次使用factor时都会调用pow()函数;它只被调用一次,初始值为 Pow.

请注意,您提供的代码无法编译。您必须在 vectorpow 等标识符之前指定名称空间 - 否则编译器将无法理解它们;并且您还需要包括适当的 headers.

如果你有一个 using namespace std 偶然地隐藏在你的程序中的某个地方 - 好吧,不要使用它:

Why is "using namespace std;" considered bad practice?

KIS(保持简单)

int convertToNumber(std::vector<int> const& nums) {
    int result_num{0};
    for (auto n : nums) {
        result_num *= 10;
        result_num += n;
    }
    return result_num;
}

甚至使用算法

int convertToNumber(std::vector<int> const& nums) {
    return std::accumulate(cbegin(nums), cend(nums), 0,
        [](int a, int n) { return a*10+n; });
}