777

晴天  •  2天前


include

include

include // 用于输入验证

include // 用于输出格式控制

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;

}


评论:

请先登录,才能进行评论