晴天 • 2天前
using namespace std;
// 优化后的质数判断函数 bool isPrime(int n) {
if (n <= 1)
return false;
if (n == 2)
return true;
if (n % 2 == 0)
return false;
for (int i = 3; i <= sqrt(n); i += 2) {
if (n % i == 0)
return false;
}
return true;
}
// 清除输入错误状态和缓冲区 void clearInput() {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int main() {
char choice;
do {
system("cls"); // 清屏 (Windows)
// system("clear"); // Linux/macOS使用这行
cout << "========== 多功能计算器 ==========\n";
cout << "1. 加法\n2. 减法\n3. 乘法\n4. 除法\n";
cout << "5. 次方计算\n6. 开根\n7. 质数判断\n8.毛利率计算\n9.盈亏平衡计算\n10. 退出\n";
cout << "请选择操作(1-10): ";
int f;
while (!(cin >> f) || f < 1 || f > 10) {
clearInput();
cout << "输入无效,请选择1-10: ";
}
if (f == 10)
break; // 退出程序
cout << "------------------------------\n";
switch (f) {
case 1: { // 加法
int count;
cout << "请输入需要相加的数的数量(1-9998): ";
while (!(cin >> count) || count < 1 || count > 9998) {
clearInput();
cout << "输入无效,请输入1-9998: ";
}
double sum = 0, num;
cout << "请输入" << count << "个需要相加的数: ";
for (int i = 0; i < count; i++) {
while (!(cin >> num)) {
clearInput();
cout << "输入无效,请重新输入第" << i + 1 << "个数: ";
}
sum += num;
}
cout << "------------------------------\n";
cout << "加法结果: " << sum << endl;
break;
}
case 2: { // 减法
double minuend;
cout << "请输入被减数: ";
while (!(cin >> minuend)) {
clearInput();
cout << "输入无效,请重新输入被减数: ";
}
int count;
cout << "请输入需要减去的数的数量(1-9998): ";
while (!(cin >> count) || count < 1 || count > 9998) {
clearInput();
cout << "输入无效,请输入1-9998: ";
}
double subtrahend;
cout << "请输入" << count << "个需要减去的数: ";
for (int i = 0; i < count; i++) {
while (!(cin >> subtrahend)) {
clearInput();
cout << "输入无效,请重新输入第" << i + 1 << "个数: ";
}
minuend -= subtrahend;
}
cout << "------------------------------\n";
cout << "减法结果: " << minuend << endl;
break;
}
case 3: { // 乘法
int count;
cout << "请输入需要相乘的数的数量(1-9998): ";
while (!(cin >> count) || count < 1 || count > 9998) {
clearInput();
cout << "输入无效,请输入1-9998: ";
}
double product = 1, num;
cout << "请输入" << count << "个需要相乘的数: ";
for (int i = 0; i < count; i++) {
while (!(cin >> num)) {
clearInput();
cout << "输入无效,请重新输入第" << i + 1 << "个数: ";
}
product *= num;
}
cout << "------------------------------\n";
cout << "乘法结果: " << product << endl;
break;
}
case 4: { // 除法
double dividend;
cout << "请输入被除数: ";
while (!(cin >> dividend)) {
clearInput();
cout << "输入无效,请重新输入被除数: ";
}
int count;
cout << "请输入除数的数量(1-9998): ";
while (!(cin >> count) || count < 1 || count > 9998) {
clearInput();
cout << "输入无效,请输入1-9998: ";
}
double divisor;
cout << "请输入" << count << "个除数: ";
for (int i = 0; i < count; i++) {
while (!(cin >> divisor) || divisor == 0) {
clearInput();
if (divisor == 0) {
cout << "除数不能为0,请重新输入第" << i + 1 << "个除数: ";
} else {
cout << "输入无效,请重新输入第" << i + 1 << "个除数: ";
}
}
dividend /= divisor;
}
cout << "------------------------------\n";
cout << "除法结果: " << dividend << endl;
break;
}
case 5: { // 次方计算
double base, exponent;
cout << "请输入底数: ";
while (!(cin >> base)) {
clearInput();
cout << "输入无效,请重新输入底数: ";
}
cout << "请输入指数: ";
while (!(cin >> exponent)) {
clearInput();
cout << "输入无效,请重新输入指数: ";
}
cout << "------------------------------\n";
cout << "次方结果: " << pow(base, exponent) << endl;
break;
}
case 6: { // 开根
double num;
cout << "请输入需要开根的数: ";
while (!(cin >> num)) {
clearInput();
cout << "输入无效,请重新输入: ";
}
cout << "------------------------------\n";
if (num >= 0) {
cout << "开根结果: " << sqrt(num) << endl;
} else {
cout << "错误:不能对负数开平方根" << endl;
}
break;
}
case 7: { // 质数判断
int num;
cout << "请输入需要判断的数: ";
while (!(cin >> num)) {
clearInput();
cout << "输入无效,请重新输入: ";
}
cout << "------------------------------\n";
if (isPrime(num)) {
cout << num << " 是质数" << endl;
} else {
cout << num << " 不是质数" << endl;
}
break;
}
case 8: { // 毛利率计算
double cost, price;
cout << "请输入进货价格: ";
while (!(cin >> cost)) {
clearInput();
cout << "输入无效,请重新输入进货价格: ";
}
cout << "请输入卖出的价格: ";
while (!(cin >> price)) {
clearInput();
cout << "输入无效,请重新输入卖出的价格: ";
}
if (price == 0) {
cout << "错误:卖出价格不能为0" << endl;
} else {
double profitMargin = (price - cost) / price * 100; // 转换为百分比
cout << "------------------------------\n";
cout << "毛利率: " << profitMargin << "%" << endl;
}
break;
}
case 9: { // 盈亏平衡计算
double fixedCost, variableCost, unitPrice;
// 输入固定成本
cout << "请输入每月固定成本(如房租、工资等): ";
while (!(cin >> fixedCost) || fixedCost < 0) {
clearInput();
cout << "输入无效,固定成本不能为负,请重新输入: ";
}
// 输入可变成本
cout << "请输入每件产品的可变成本: ";
while (!(cin >> variableCost) || variableCost < 0) {
clearInput();
cout << "输入无效,可变成本不能为负,请重新输入: ";
}
// 输入单价
cout << "请输入产品单价: ";
while (!(cin >> unitPrice) || unitPrice <= 0) {
clearInput();
cout << "输入无效,单价必须大于0,请重新输入: ";
}
// 计算盈亏平衡点
if (unitPrice <= variableCost) {
cout << "警告:单价不超过可变成本,无法实现盈亏平衡!\n";
} else {
double breakEven = fixedCost / (unitPrice - variableCost);
cout << "\n====== 盈亏平衡分析 ======\n";
cout << fixed << setprecision(2);
cout << "需销售产品数量: " << ceil(breakEven) << " 件\n";
cout << "相当于每天需销售: " << ceil(breakEven / 30) << " 件\n";
cout << "相当于每月需销售: " << ceil(breakEven) << " 件\n";
cout << "相当于每年需销售: " << ceil(breakEven * 12) << " 件\n";
double dailySales = ceil(breakEven / 30) * unitPrice;
cout << "\n需达到的营业额:\n";
cout << "每日: ¥" << dailySales << endl;
cout << "每月: ¥" << ceil(breakEven) * unitPrice << endl;
cout << "每年: ¥" << ceil(breakEven * 12) * unitPrice << endl;
}
break;
}
}
cout << "------------------------------\n";
cout << "是否继续计算?(y/n): ";
cin >> choice;
clearInput(); // 清除输入缓冲区
} while (choice == 'y' || choice == 'Y');
cout << "感谢使用多功能计算器,再见!" << endl;
return 0;
}
评论:
请先登录,才能进行评论