You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大一学生求助:C++简易计算器循环作业问题

你的C++简易计算器代码问题排查与修正

代码存在的核心问题:

  • 数据类型错误:你用int tab[100]存储输入数字,但题目输入包含浮点数(如3.1、3.3),int会直接截断小数部分,导致计算结果完全偏离预期。
  • 运算逻辑错误:你在读取每个数字时就试图和下一个未读取的数字运算,这不仅会触发数组越界(比如j循环到最后一位时,j+1超出数组范围),还完全违背了累加/累乘的基本逻辑——应该先收集所有数字,再从初始值开始逐个运算。
  • 输出时机错误:题目要求每个测试用例输出一个最终结果,但你的代码每读一个数字就输出一次,会产生多余输出,不符合示例格式。
  • 数组越界风险:原代码中tab[j] += tab[j+1],当j为k-1时,j+1等于k,超出数组有效索引范围,会导致未定义行为。

修正后的代码:

#include <iostream>
using namespace std;

int main() {
    int n, k;
    char op;
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        cin >> op >> k;
        double result;
        // 根据操作类型初始化结果值
        if (op == '+') {
            result = 0.0;
        } else if (op == '*') {
            result = 1.0;
        }
        // 读取数字并完成运算
        for (int j = 0; j < k; j++) {
            double num;
            cin >> num;
            if (op == '+') {
                result += num;
            } else if (op == '*') {
                result *= num;
            }
        }
        // 输出当前测试用例的最终结果
        cout << result << endl;
    }
    return 0;
}

修正说明:

  1. 改用double类型处理数字,完美支持浮点数的输入与运算,避免小数截断问题。
  2. 去掉固定大小数组,直接在读取数字时更新结果,既节省内存又彻底避免数组越界。
  3. 针对加法/乘法分别初始化结果:加法从0开始累加,乘法从1开始累乘,完全符合数学运算逻辑,同时兼容k=1的特殊情况(如示例中第三个测试用例)。
  4. 每个测试用例完成所有运算后才输出结果,严格匹配题目要求的输出格式。

内容的提问来源于stack exchange,提问作者yougotproblems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:20:32