全WA,找不到问题求佬帮帮

P1957 口算练习题

igopor @ 2024-11-18 17:00:21

#include <bits/stdc++.h>
#include <vector>
using namespace std;

int len(int a);

char p;//记录运算符 
int main()
{
    int i;
    cin>>i;
    int j;
    string z;
    int a,b,c; //仨数字 
    for(j=0;j<i;j++){
        getline(cin,z); 
        if(z[z.size()-1]=='\n'){
            z.resize(z.size()-1);//移除换行符 
        }
        if(z.size()==3){
            p=z[0];
            a=z[1]-'0';
            b=z[2]-'0';
        }
        else{
            a=z[0]-'0';
            b=z[1]-'0';
        }
        if(p=='a'){
            c=a+b;
            cout<<a<<"+"<<b<<"="<<c;
            cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
        }
        if(p=='b'){
            c=a-b;
            cout<<a<<"-"<<b<<"="<<c;
            cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
        }
        if(p=='c'){
            c=a*b;
            cout<<a<<"*"<<b<<"="<<c;
            cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
        }
    }
    return 0;
}

int len(int a){//求数字占位
    int le=0;
    if(a<=0){
        le++;
        a=-a;
    }
    while(a>0){
        le++;
        a=a/10;
    }
    return le;
}

by queenbee @ 2024-11-18 17:19:28

@igopor

建议重构代码

1、你getline直接给一行全输入进去了,你输进去的是一整行的字符串

2、字符串s-'0'不是对应的int的值,必须s[i]-'0'是这一位对应int的值

3、……

反正就是一堆错,不想说了,自己看看题解学学入门算法吧


by igopor @ 2024-11-18 17:50:34

@queenbee 好的谢谢佬!

(写着写着把py列表和这里的字符串弄混了呃啊啊啊确实一堆错。。。。。

灰溜溜回去写了...oTATo


by Flora_liu @ 2024-11-27 21:13:34

@igopor 这段代码中存在几个问题,主要集中在处理输入和输出格式,以及变量使用上。以下是详细的问题分析和修正建议:

输入处理: 当使用 getline(cin, z) 后,如果输入行以换行符结束,z[z.size()-1] 已经是字符串的末尾的空字符 '\0' 而不是换行符 '\n'。换行符在 getline 中已经被去除。因此,检查并移除换行符的代码是多余的。 当输入只有两个数字时,程序没有正确处理运算类型 p,因为它依赖于前一个输入行的运算类型。如果第一行输入就是两个数字,那么 p 将是未初始化的,导致未定义行为。 输出格式: 输出格式要求输出算式及其长度,但代码中 len 函数计算的是数字的位数,而不是整个算式的长度。算式的长度应包括运算符、数字、等号以及可能的空格和符号。 代码风格和效率: 使用 #include <bits/stdc++.h> 是不推荐的,因为它包含了大量不必要的头文件,可能影响编译效率。 使用 using namespace std; 可能会导致命名冲突。 边界条件: 当输入的数字为 0 或负数时,虽然题目指定非负整数,但代码中对负数的处理(如增加长度)应被移除或确认输入有效性。 下面是修正后的代码:

cpp

#include <iostream>
#include <string>
using namespace std;

int len(int a) {
    // 转换为字符串计算长度,考虑正负号
    string s = to_string(a);
    return s.length();
}

int main() {
    int i;
    cin >> i;
    cin.ignore();  // 忽略第一行输入后的换行符
    char p = ' ';  // 初始化运算符
    for (int j = 0; j < i; j++) {
        string z;
        getline(cin, z);
        int a, b;
        char op;
        if (z.size() == 3) {
            op = z[0];
            a = z[1] - '0';
            b = z[2] - '0';
        } else if (z.size() == 2) {
            a = z[0] - '0';
            b = z[1] - '0';
            op = p;  // 使用前一个运算符
        } else {
            cerr << "Invalid input format" << endl;
            return 1;  // 退出程序
        }

        int c;
        string result;
        if (op == 'a') {
            c = a + b;
            result = to_string(a) + "+" + to_string(b) + "=" + to_string(c);
        } else if (op == 'b') {
            c = a - b;
            result = to_string(a) + "-" + to_string(b) + "=" + to_string(c);
        } else if (op == 'c') {
            c = a * b;
            result = to_string(a) + "*" + to_string(b) + "=" + to_string(c);
        }

        cout << result << endl;
        cout << result.length() << endl;

        p = op;  // 更新运算符
    }
    return 0;
}

这个修正版本解决了输入处理的问题,正确计算了算式的长度,并处理了可能的输入格式错误。


by Yuhaochen666 @ 2024-12-04 20:17:32

正确代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    int n,x,b1=0,b2=0,b3=0,d,j,cnt=0;
    cin>>n;
    for(int i=0;i<=n;i++)
    {
        getline(cin,a);
        d=a.size();
        if(a[0]=='a')
        {
            x=1;
            for(j=2;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b1*=10;
                    b1+=(a[j]-'0');
                }
                else
                {
                    break;
                }
            }
            j++;
            for(;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b2*=10;
                    b2+=(a[j]-'0');
                }
            }
            b3=b1+b2;
            cout<<b1<<"+"<<b2<<"="<<b3<<endl;
            for(;b3>0;b3/=10)
            {
                cnt++;
            }
            if(cnt==0)
            {
                cnt=1;
            }
            cout<<(d-1+cnt)<<endl;
            cnt=0;
            b1=0;
            b2=0;
        }
        else if(a[0]=='b')
        {
            x=2;
            for(j=2;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b1*=10;
                    b1+=(a[j]-'0');
                }
                else
                {
                    break;
                }
            }
            j++;
            for(;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b2*=10;
                    b2+=(a[j]-'0');
                }
            }
            b3=b1-b2;
            cout<<b1<<"-"<<b2<<"="<<b3<<endl;
            if(b3<0)
            {
                cnt++;
                b3*=-1;
            }
            for(;b3>0;b3/=10)
            {
                cnt++;
            }
            if(cnt==0)
            {
                cnt=1;
            }
            cout<<(d-1+cnt)<<endl;
            cnt=0;
            b1=0;
            b2=0;
        }
        else if(a[0]=='c')
        {
            x=3;
            for(j=2;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b1*=10;
                    b1+=(a[j]-'0');
                }
                else
                {
                    break;
                }
            }
            j++;
            for(;j<d;j++)
            {
                if(a[j]!=' ')
                {
                    b2*=10;
                    b2+=(a[j]-'0');
                }
            }
            b3=b1*b2;
            cout<<b1<<"*"<<b2<<"="<<b3<<endl;
            for(;b3>0;b3/=10)
            {
                cnt++;
            }
            if(cnt==0)
            {
                cnt=1;
            }
            cout<<(d-1+cnt)<<endl;
            cnt=0;
            b1=0;
            b2=0;
        }
        else
        {
            if(x==1)
            {
                for(j=0;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b1*=10;
                        b1+=(a[j]-'0');
                    }
                    else
                    {
                        break;
                    }
                }
                j++;
                for(;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b2*=10;
                        b2+=(a[j]-'0');
                    }
                }
                b3=b1+b2;
                cout<<b1<<"+"<<b2<<"="<<b3<<endl;
                for(;b3>0;b3/=10)
                {
                    cnt++;
                }
                if(cnt==0)
                {
                    cnt=1;
                }
                cout<<(d+1+cnt)<<endl;
                cnt=0;
                b1=0;
                b2=0;
            }
            if(x==2)
            {
                for(j=0;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b1*=10;
                        b1+=(a[j]-'0');
                    }
                    else
                    {
                        break;
                    }
                }
                j++;
                for(;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b2*=10;
                        b2+=(a[j]-'0');
                    }
                }
                b3=b1-b2;
                cout<<b1<<"-"<<b2<<"="<<b3<<endl;
                if(b3<0)
                {
                    cnt++;
                    b3*=-1;
                }
                for(;b3>0;b3/=10)
                {
                    cnt++;
                }
                if(cnt==0)
                {
                    cnt=1;
                }
                cout<<(d+1+cnt)<<endl;
                cnt=0;
                b1=0;
                b2=0;
            }
            if(x==3)
            {
                for(j=0;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b1*=10;
                        b1+=(a[j]-'0');
                    }
                    else
                    {
                        break;
                    }
                }
                j++;
                for(;j<d;j++)
                {
                    if(a[j]!=' ')
                    {
                        b2*=10;
                        b2+=(a[j]-'0');
                    }
                }
                b3=b1*b2;
                cout<<b1<<"*"<<b2<<"="<<b3<<endl;
                for(;b3>0;b3/=10)
                {
                    cnt++;
                }
                if(cnt==0)
                {
                    cnt=1;
                }
                cout<<(d+1+cnt)<<endl;
                cnt=0;
                b1=0;
                b2=0;
            }
        }
    }
    return 0;
}

|