手测都对,提交全WA,测过在线IDE

P1957 口算练习题

entity @ 2020-10-28 22:21:47

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;
/*
4
a 64 46
275 125
c 11 99
b 46 64

1
a 99 999
*/
int a,b,c,n,len=0;
char str[30]={},save='d';
int space[11]={1,10,100,1000,10000};
int main(){
    scanf("%d",&n);
    getchar();
    while(n--){
        len=0;
        cin.getline(str,20);
        if(str[0]>='a'&&str[0]<='c'){
            bool f=false;
            a=0;
            b=0;
            int lenth=strlen(str);
            for(int i=2;i<lenth;i++){
                if(str[i]==' '){
                    f=true;
                }else{
                    if(!f) a=a*10+str[i]-'0';
                    else b=b*10+str[i]-'0';
                }
            }
            if(str[0]=='a'){
                c=a+b;
                save='a';
            }else{
                if(str[0]=='b'){
                    c=a-b;
                    save='b';
                }else{
                    c=a*b;
                    save='c';
                }
            }
        }else{
            bool f=false;
            a=0;
            b=0;
            int lenth=strlen(str);
            for(int i=0;i<lenth;i++){
                if(str[i]==' '){
                    f=true;
                }else{
                    if(!f) a=a*10+str[i]-'0';
                    else b=b*10+str[i]-'0';
                }
            }
            if(save=='a') c=a+b;
            else if(save=='b') c=a-b;
            else c=a*b;
        }
        cout<<a;
        if(save=='a') cout<<'+';
        else if(save=='b') cout<<'-';
        else cout<<'*';
        cout<<b<<'='<<c<<endl;
        if(a<0){
            len++;
            a=-a;
        }
        if(b<0){
            len++;
            b=-b;
        }
        if(c<0){
            len++;
            c=-c;
        }
        if(a>10000)len+=5;
        else
            for(int i=1;i<=4;i++)
                if(space[i]>a){
                    len+=i;
                    break;
                }
        if(b>10000)len+=5;
        else
            for(int i=1;i<=4;i++)
                if(space[i]>b){
                    len+=i;
                    break;
                }
        if(c>10000)len+=5;
        else
            for(int i=1;i<=4;i++)
                if(space[i]>c){
                    len+=i;
                    break;
                }
        len+=2;
        cout<<len<<endl;
    }
    return 0;
} 

第一个测试点说我的第六位是5,洛谷在线IDE测试过,没有问题QwQ


by donghanwen1225 @ 2020-10-28 22:37:25

for(int i=0;i<lenth;i++){
                if(str[i]==' '){
                    f=true;
                }else{
                    if(!f) a=a*10+str[i]-'0';
                    else b=b*10+str[i]-'0';
                }
            }

注意这题数据可能很毒瘤(比如第一个数字之前有一大堆空格),所以您最好把第三行改成if(str[i]==' '&&a)


|