11

晴天  •  14天前


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;

}

// 判断是否是孪生素数的一部分 bool isTwinPrime(int n) {

if (!isPrime(n)) {
    return false; // 如果不是质数,直接返回 false
}
// 检查 n+2 或 n-2 是否也是质数
return isPrime(n + 2) || isPrime(n - 2);

}

// 清除输入错误状态和缓冲区 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;
                // 检查是否是孪生素数
                if (isTwinPrime(num)) {
                    if (isPrime(num - 2)) {
                        cout << num << " 和 " << num - 2 << " 构成孪生素数对" << endl;
                    }
                    if (isPrime(num + 2)) {
                        cout << num << " 和 " << num + 2 << " 构成孪生素数对" << endl;
                    }
                } else {
                    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 << "毛利率: " << fixed << setprecision(2) << 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;

}


评论:

请先登录,才能进行评论