求大佬解答,有三个一直不过,下载了样例自测都是对的

P1957 口算练习题

blablabl @ 2023-03-22 20:46:19

下载了第一个错误样例一行一行对,感觉没问题,但是一直没过[它真的我哭死]

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string.h>
using namespace std;
int sum(int n) {    //统计数字的位数
    int cnt = 0;
    if(n < 0) cnt ++;
    while(n) {
        n /= 10;
        cnt ++;
    }
    return cnt;
}
int main() {
    int n;
    cin >> n;
    while(n --) {
        getchar();
      //对每次的变量进行初始化
        char stay, v[4] = {'\0', '\0', '\0', '\0'};
        int a = 0, b = 0, cnt = 0, end = 0;
        cin >> v;
        //如果是第一个字符数字就就计算当前的字符串代表的数字
        if(v[0] < 'a') {
            if(v[1] == '\0') a = v[0] - '0';
            else {
                int l = strlen(v) - 1;
                for(int i = 0; l >= 0; l --, i ++) a += (v[i] - '0') * pow(10, l);
            }
            cin >> b;   //只需输入一个数字
            v[0] = stay;    //将上一题的运算符赋给当前的运算符
        }
         //如果是字母则输入两个数字
        else cin >> a >> b;
        //根据当前的运算符进行计算
        if(v[0] == 'a') {
                end = a + b;
                printf("%d+%d=%d\n", a, b, end);
            }
        else if(v[0] == 'b') {
            end = a - b;
            printf("%d-%d=%d\n", a, b, end);
        }
        else if(v[0] == 'c') {
            end = a * b;
            printf("%d*%d=%d\n", a, b, end);
        }
        //存一下当前的运算符
        stay = v[0];
        cnt = sum(a) + sum(b) + sum(end) + 2;
        cout << cnt << endl;
    }
    return 0;
}

|