将向量数组转换为数字
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
.
请注意,您提供的代码无法编译。您必须在 vector
和 pow
等标识符之前指定名称空间 - 否则编译器将无法理解它们;并且您还需要包括适当的 headers.
如果你有一个 using namespace std
偶然地隐藏在你的程序中的某个地方 - 好吧,不要使用它:
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; });
}
我在 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
.
请注意,您提供的代码无法编译。您必须在 vector
和 pow
等标识符之前指定名称空间 - 否则编译器将无法理解它们;并且您还需要包括适当的 headers.
如果你有一个 using namespace std
偶然地隐藏在你的程序中的某个地方 - 好吧,不要使用它:
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; });
}