我在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;
}
我得到了240000,而我应该得到235626。我找了很久都找不到代码中的逻辑错误。有人知道怎么回事吗?
在循环的每次迭代中,您都在更新pow
-但不更新factor
;循环中使用的是factor
,而不是pow
。
请记住,当您将表达式赋给变量时,该表达式只求一次值,而这一次求值的结果就是变量所设置的值。换句话说,每次使用factor
时,不会调用pow()
函数;它只调用一次,初始值为pow
。
注意您提供的代码将无法编译。必须在诸如vector
和pow
等标识符之前指定名称空间-否则编译器将无法理解它们;并且还需要包含适当的头。
如果碰巧在程序的某个地方隐藏了一个使用名称空间std的-那么,不要使用它:
为什么“使用命名空间std;”被认为是不好的做法?