运行有问题,哪里不对?

P1957 口算练习题

pengqiushi @ 2022-08-02 17:44:08

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
char t[15];
void qkt(){
    for(int i=1; i<=10; i++)
        t[i]=0;
    return;
}
int cmp(int a,int b,char f){
    if(f=='a')
        return a+b;
    if(f=='b')
        return a-b;
    return a*b;
}
char scf(char f){
    if(f=='a')
        return '+';
    if(f=='b')
        return '-';
    return '*';
}
int main()
{
    int a=0,b=0,n,l=0,cnt=1,z=0;
    char f;
    cin>>n;
    for(int i=1; i<=n; i++){
        scanf("%s",t);
        l+=strlen(t);
        if(t[0]<'0'||t[0]>'9'){
            f=t[0];
            qkt();
            scanf("%s",t);
            l+=strlen(t);
            for(int i=strlen(t)-1; i>=0; i--){
                z=t[strlen(t)-i-1]-48;
                a+=z;
            }
            qkt();
            scanf("%s",t);
            l+=strlen(t);
            for(int i=strlen(t)-1; i>=0; i--){
                z=t[strlen(t)-i-1]-48;
                b+=z;
            }
        }
        else{
            qkt();
            scanf("%s",t);
            l+=strlen(t);
            for(int i=strlen(t)-1; i>=0; i--){
                z=t[strlen(t)-i-1]-48;
                b+=z;
            }
        }
        int sum=cmp(a,b,f);
        printf("%d%c%d=%d\n%d",a,scf(f),b,sum,l);
        cout<<endl;
    }
    return 0;
}

运行结果如下:


by _cyle_King @ 2022-08-02 19:43:06

@pengqiushi 调好了,下面的代码可以 AC。

#include<iostream>
#include<cstring>
using namespace std;
char t[15];
void qkt(){
    for(int i=1; i<=10; i++)
        t[i]=0;
    return;
}
int cmp(int a,int b,char f){
    if(f=='a')
        return a+b;
    if(f=='b')
        return a-b;
    return a*b;
}
char scf(char f){
    if(f=='a')
        return '+';
    if(f=='b')
        return '-';
    return '*';
}
inline int
glen(int x){
    int len=x<0;
    do len++,x/=10;while(x);
    return len;
}
int main()
{
    int a=0,b=0,n,l=0,cnt=1,z=0;
    char f;
    cin>>n;
    for(int i=1; i<=n; i++){
        scanf("%s",t);
        if(t[0]<'0'||t[0]>'9'){
            f=t[0];
            scanf("%d%d",&a,&b);
            l=glen(a)+glen(b);
        }
        else{
            int len=strlen(t);a=0;l=len;
            for(int i=0;i<len;i++)
                a=a*10+t[i]-'0';
            scanf("%d",&b);
            l+=glen(b);
        }
        int sum=cmp(a,b,f);l+=glen(sum);
        printf("%d%c%d=%d\n%d",a,scf(f),b,sum,l+2);
        cout<<endl;
    }
    return 0;
}

by pengqiushi @ 2022-08-02 21:23:56

@_cyle_King 收到,非常感谢。


by pengqiushi @ 2022-08-02 21:33:32

终于AC了,这道题从很早以前就开始坐,到现在才AC。


|