简单函数并不总是返回预期的输出
Simple function does not always return expected output
我有一个程序,用户在其中输入到期金额和支付金额。函数makeChange(双倍金额(传递差额(已付 - 到期(并返回一个双精度数组,其中到期的更改按面额细分。
double* makeChange(double amount) {
double* change = new double[10];
double values[10] = { 100, 50, 20, 10, 5, 1, .25, .10, .05, .01 };
double remaining = amount;
for (int i = 0; i < 10; i++) {
change[i] = floor(remaining / values[i]);
remaining -= (change[i] * values[i]);
}
return change;
}
我并不总是得到预期的输出。例如,当我传递(0.05 - 0.00(作为金额时,它返回说我需要 1 镍。但是如果我通过(4.05 - 4.00(作为金额,它会返回说我需要 4 便士。
代码中的什么导致这种情况发生? 谢谢!
我认为您发布的代码没有任何问题。 问题可能出在你正在解释的这个函数的调用方身上 更改数组中的值。 如果您也可以在此处发布,那将更有帮助。
干杯。
首先,在 c++ 中你不需要使用指针来创建数组,你可以使用std::array
. 您可以替换函数,并使其对内存更安全:
array<double, 10> makeChange(double amount) {
cout << "Amount: " << amount << endl;
array<double, 10> change = {};
double values[10] = { 100, 50, 20, 10, 5, 1, .25, .10, .05, .01 };
double remaining = amount;
for (int i = 0; i < change.size(); i++) {
change[i] = floor(remaining / values[i]);
remaining -= (change[i] * values[i]);
}
return change;
}
int main() {
array<double, 10> change;
change = makeChange(4.05f - 4.0f);
for (size_t i = 0; i < change.size(); i++) {
cout << change[i] << endl;
}
return 0;
}
对于更改问题 - 当您将浮点值传递给函数时,使用f
传递它们,如下所示:
change = makeChange(4.05f - 4.0f);
这将使您的计算不那么意外,因为您正在取点后数字较少的数字(使用float
而不是double
(。或者更简单的解决方案,用浮点数替换所有双精度(这在概念中没有影响,但会解决这个问题(:
array<float, 10> makeChange(float amount) {
cout << "Amount: " << amount << endl;
array<float, 10> change = {};
float values[10] = { 100, 50, 20, 10, 5, 1, .25, .10, .05, .01 };
float remaining = amount;
for (int i = 0; i < change.size(); i++) {
change[i] = floor(remaining / values[i]);
remaining -= (change[i] * values[i]);
}
return change;
}
int main() {
array<float, 10> change = makeChange(4.05 - 4.0);
for (size_t i = 0; i < change.size(); i++) {
cout << change[i] << endl;
}
return 0;
}
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- C++输出参数与返回值
- cpp 返回具有相同输入的不同输出
- 显示C++输出而不返回值
- 简单函数并不总是返回预期的输出
- 输出返回编号。等于输入字符串的单词的字符串数
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 为什么 boost::locale::to_title 不返回预期的输出?
- 在函数中连接两个字符,并在 C++ 中返回输出
- 同一个程序每次返回不同的输出
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- cout.width和cout.fill返回不同的输出
- C 输出返回值
- 面向对象C++帮助?出于某种原因,对象变量的输出返回数值数组位置而不是实际值
- 调用一个方法会将输出返回到同一类c++的另一个方法中
- 二进制文件中结构的输出返回垃圾
- KissFFT输出返回一个值
- 为什么FFTW输入非零,输出返回全零(c++)