救命啊各位dalao为啥样例过了还能爆0啊

P1957 口算练习题

continue_waste @ 2020-10-10 16:06:01

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctype.h>
#include<iostream>
#include<algorithm>
#include<math.h>
char a[1000];//存放字符信息
int b[5]; //存放数字信息

int  l(int x) {  //可用来计算长度
    int length=0;
    if(x<0)
        length+=1;
    while(x) {
        x/=10;
        length++;
    }
    return length;
}

//用一个函数把数字部分输入数字数组
//有运算符号时
void c1(char a[]) {
    int sum=0;
    int cnt=0;
    int length=strlen(a);
    for(int i=0; i<length; i++) {
        if(a[i]==' ') {
            int t=i+1;
            while(a[t]!=' '&&t!=length) {
                sum=sum*10+a[t]-'0';
                t++;           //得到了第一个空格后的第一个数
            }
            if(sum!=0) {
                b[cnt]=sum;
                cnt++;
                sum=0;
            }
        }
    }
}

//无运算符时
void c2(char a[]) {
    int length=strlen(a);
    int cnt=0;
    int sum=0;
    for(int i=0; i<=length; i++) {
        if(a[i]!=' '&&i!=length) {
            sum=sum*10+a[i]-'0';
        }
        if(a[i]==' '||i==length) {
            b[cnt]=sum;
            cnt++;
            sum=0;
        }
    }
}

using namespace std;
int main() {
    int i;
    scanf("%d",&i);
    getchar();
    int flag=0;
    for(int j=0; j<i; j++) {
        gets(a);
        if(a[0]>='a'&&a[0]<='c') {  //有运算符
            c1(a);
            if(a[0]=='a') {
                printf("%d+%d=%d\n",b[0],b[1],b[0]+b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]+b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]+b[1])+2);
                flag=1;
            }
            if(a[0]=='b') {
                printf("%d-%d=%d\n",b[0],b[1],b[0]-b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]-b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]-b[1])+2);
                flag=2;
            }
            if(a[0]=='c') {
                printf("%d*%d=%d\n",b[0],b[1],b[0]*b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]*b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]*b[1])+2);
                flag=3;
            }
        } else {
            c2(a);
            if(flag==1) {
                printf("%d+%d=%d\n",b[0],b[1],b[0]+b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]+b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]+b[1])+2);
            }
            if(flag==2) {
                printf("%d-%d=%d\n",b[0],b[1],b[0]-b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]-b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]-b[1])+2);
            }
            if(flag==3) {
                printf("%d*%d=%d\n",b[0],b[1],b[0]*b[1]);
                if(j==i-1)
                    printf("%d",l(b[0])+l(b[1])+l(b[0]*b[1])+2);
                else
                    printf("%d\n",l(b[0])+l(b[1])+l(b[0]*b[1])+2);
            }
        }
    }
    return 0;
}

|