C++代码计算折扣后价格输出始终为0,求排查问题
问题修复:C++折扣计算代码输出异常
核心问题分析
你的代码始终无法得到正确折扣价,根源在于整数除法的运算逻辑:
- 代码中
discount = (youn/100)*sum;这一行,由于youn是年龄(必然小于100的整数),整数除法规则下youn/100的结果直接为0。0乘以任何数都是0,导致折扣金额始终为0,最终输出的是未打折的原价(50),而非预期值。 - 另外,你把
sum +=10放在寻找最小年龄的循环里,虽然结果正确,但逻辑冗余,完全可以直接用sum = 5 * 10替代。
修复后的代码
#include <iostream> using namespace std; int main() { int ages[5]; int sum = 5 * 10; // 直接计算5人总原价,无需循环累加 for (int i = 0; i < 5; i++) { cin >> ages[i]; } // 找出最小年龄 int youn = ages[0]; for(int i = 0; i < 5; i++){ if(ages[i] < youn){ youn = ages[i]; } } // 调整运算顺序:先乘后除,避免提前得到0 int discount = sum * youn / 100; sum -= discount; cout << sum; return 0; }
额外优化提示
如果需要支持带小数的精确折扣计算,可以改用浮点数类型处理:
#include <iostream> #include <cmath> // 用于round()函数 using namespace std; int main() { int ages[5]; int sum = 50; for (int i = 0; i < 5; i++) { cin >> ages[i]; } int youn = ages[0]; for(int i = 0; i < 5; i++){ if(ages[i] < youn){ youn = ages[i]; } } // 用浮点数计算精确折扣,再取整 double exact_discount = sum * (youn / 100.0); sum -= static_cast<int>(round(exact_discount)); // 四舍五入取整 cout << sum; return 0; }
内容的提问来源于stack exchange,提问作者Mohammad Awni Alkhatib
相关产品推荐
相关产品推荐

