70分代码,错#2#9#10,求大佬调教

P1957 口算练习题

GodUseVPN @ 2023-07-25 16:04:59

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

by sxjsxj @ 2023-07-27 11:12:39

哇,代码真的长,改了好久,终于AC了·-·,可以给个关注嘛·-·

AC代码(精华48行):

#include<bits/stdc++.h>
using namespace std;
int changdu(int x)//增加一个运算数字长度的子程序,更方便一点
{
    int ans=0;
    if(x<=0) ans++;//这里是小于等于而不是小于是因为下面的循环改为判断d是否大于0,如果是小于的话sum会小1,也可以不用小于等于,但下面得while要改为do-while 
    while(x)
    {
        x/=10;
        ans++;
    }
    return ans;
 } 
int main(){
    int n,sum=0,b,c,d,f,x,y;
    cin>>n;
    string a;
    while(n--){//用while会比for效率高 
        cin>>a;
        if(a[0]>='a' && a[0]<='c'){//整合修改一下,源代码效率有点低 
            cin>>x>>y; //将类型从string改为int,第一个是字母,接下来两个输入就一定是数字 
            sum=0;
            sum+=changdu(x)+changdu(y)+2;//这里应该是加2不是加3,算式内只要加运算符与等号 
            if(a[0]=='a')
                d=x+y,f=1,cout<<x<<"+"<<y<<"="<<d<<endl;
            if(a[0]=='b')
                d=x-y,f=2,cout<<x<<"-"<<y<<"="<<d<<endl;
            if(a[0]=='c')
                d=x*y,f=3,cout<<x<<"*"<<y<<"="<<d<<endl;//这里也做了部分整合
            cout<<sum+changdu(d)<<endl;
        }
        else
        {
            b=0;sum=0;
            for(int i=0;i<a.size();i++)b=b*10+a[i]-'0';//不需要加int 
            cin>>x;//修改类型,与上同 
            cout<<b;
            sum+=changdu(b)+changdu(x)+2;// 同上
            if(f==1)
                c=b+x,cout<<"+"<<x<<"="<<c<<endl;
            else if(f==2)
                c=b-x,cout<<"-"<<x<<"="<<c<<endl;
            else if(f==3)
                c=b*x,cout<<"*"<<x<<"="<<c<<endl;//又是一个小小的整合 
                cout<<sum+changdu(c)<<endl;
        }
    }
}

by GodUseVPN @ 2023-08-01 16:14:07

@sxjsxj 栓Q,已关注;


|