明明就是对的

P1957 口算练习题

LZH2011 @ 2022-08-20 23:34:08

题目口算题练习 代码

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string s;
char fh[3]={'+','-','*'};
int JS(char c,int a,int b)
{
    if(c=='a')
    {
        return a+b;
    }
    else if(c=='b')
    {
        return a-b;
    }
    else
    {
        return a*b;
    }
}
int CD(int a)
{
    int n=0;
    if(a<0)
    {
        n+=1;
        a=-a;
    }
    do
    {
        a/=10;
        n++;
    }
    while(a>0);
    return n;
}
int main()
{
    int n;
    cin>>n;
    char c='a';
    getchar();
    for(int i=1;i<=n;i++)
    {
        int a=0,b=0,k=0;
        getline(cin,s);
        int l=s.size();
        s=s+" ";
        if(s[0]>='a' && s[0]<='c')
        {
            c=s[0];
            k=2;
        }
        while(true)
        {
            if(s[k]!=' ')
            {
                a=a*10+(s[k]-'0');
                k++;
            }
            else
            {
                break;
            }
        }
        k++;
        while(true)
        {
            if(s[k]!=' ')
            {
                b=b*10+(s[k]-'0');
                k++;
            }
            else
            {
                break;
            }
        }
        cout<<a<<fh[c-'a']<<b<<"="<<JS(c,a,b)<<endl<<CD(a)+CD(b)+CD(JS(c,a,b))+2<<endl;
    }
}

我试了好几遍,明明是对的,偏偏是全错,求大佬帮助!


by LZH2011 @ 2022-08-20 23:38:54

这里不补充一句,全RE,不知道为啥


by _Revenge_ @ 2022-08-20 23:39:27

RE可能是数组开小了,或越界,尝试修改范围。


by zsseg @ 2022-08-20 23:49:15

if(s[k]!=' ')

改成

if(s[k]>='0'&&s[k]<='9')


by zsseg @ 2022-08-20 23:52:58

getchar();

后面再加一个

getchar();

(Linux的换行符是两个字符\r\n)


by Jorisy @ 2022-08-21 07:10:37

@Jq5_ Linux 是 \n,windows 才是\r\n


by LZH2011 @ 2022-08-21 10:32:06

@Revenge 这里不可能有越界吧,就一个数组,用来储存符号


by LZH2011 @ 2022-08-21 10:37:41

@Jq5_ 感谢大佬


by zsseg @ 2022-08-21 11:29:20

记错力(悲)


|