全wa,第一个数据输出是对的,却判错,附第一个数据

P1957 口算练习题

呙凯01 @ 2020-10-24 23:05:32


int main()
{
    char a[51][20]={'\0'};
    int n,k,s=0,sum1[51]={0},len[51]={0},x;
    int jishu=0;
    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
    {
    gets(a[i]); //输入 
    } 
    for(int i=1;i<=n;i++)
    {
        int j=0;//j指向当前字符
    if(a[i][j]=='a'||(a[i][j]!='b'&&a[i][j]!='c'&&k==1))//k作记号,标明上次结束的运算方式 
    {
        if(k!=1) a[i][j]=' ',j+=2;k=1;//消除前面的指示字母'a'。。。 
        while(a[i][j]!='\0')
        {
            while(a[i][j]!=' '&&a[i][j]!='\0')
            {
                x=a[i][j]-'0';
                s=s*10+x;j++;len[i]++;
            }//累加数字长度,并将字符转换为整型 
            if(a[i][j]==' ')a[i][j]='+',j++,len[i]++;//数字间的空格变运算符 
            sum1[i]+=s;s=0;//开始累加   
        }

    }
    if(a[i][j]=='b'||(a[i][j]!='a'&&a[i][j]!='c'&&k==2))
    {
        if(k!=2) a[i][j]=' ',j+=2;k=2;
        jishu=0;//标明第一次 
        while(a[i][j]!='\0')
        {
            while(a[i][j]!=' '&&a[i][j]!='\0')
            {
                x=a[i][j]-'0';
                s=s*10+x;j++;len[i]++;
            }
            jishu++;
            if(jishu==1)
            {
            sum1[i]+=s; s=0;            
            }

            else{
                sum1[i]-=s;s=0;
            }
            if(a[i][j]==' ') a[i][j]='-',len[i]++,j++;
        }
    }
    if(a[i][j]=='c'||(a[i][j]!='a'&&a[i][j]!='b'&&k==3))
    {
        if(k!=3) a[i][j]=' ',j+=2;k=3;
        while(a[i][j]!='\0')
        {
            jishu++;
            while(a[i][j]!=' '&&a[i][j]!='\0')
            {
                x=a[i][j]-'0';
                s=s*10+x;j++;len[i]++;
            }
            if(a[i][j]==' ') a[i][j]='*',j++,len[i]++;
            if(jishu==1) sum1[i]+=s;
            else sum1[i]*=s;s=0;
        }   
    }
   }
    for(int i=1;i<=n;i++)
    {
    int j=0,len1=0;
    while(a[i][j]==' ')
    {
        j++;
    }//消除空格 
    while(a[i][j]!='\0')
    {
        printf("%c",a[i][j]);
        j++;
    }//输出字符 
    printf("=%d\n",sum1[i]);//输出和 
    if(sum1[i]<0) len1++;//为负数,加个'-'的长度 
    while(sum1[i]!=0)
    {
        len1++,sum1[i]/=10;
    }
    printf("%d",len[i]+len1+1);
    if(i<n) printf("\n");
    }
    return 0;
}```
输入
1
a 99 999
输出
99+999=1098
11

by entity @ 2020-10-28 22:09:37

铜球

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;
/*
4
a 64 46
275 125
c 11 99
b 46 64
*/
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",&n);
    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;
} 

|