P1957 口算练习题(疑问)——洛谷

题目描述

王老师正在教简单算术运算。细心的王老师收集了 �i 道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5+85+8 的算式最好只要输入 55 和 88,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=135+8=13 以及该算式的总长度 66。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。

输入格式

第一行一个整数 �i。

接着的 �i 行为需要输入的算式,每行可能有三个数据或两个数据。

若该行为三个数据则第一个数据表示运算类型,aa 表示加法运算,bb 表示减法运算,cc 表示乘法运算,接着的两个数据表示参加运算的运算数。

若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。

输出格式

输出 2×�2×i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度。

输入输出样例

输入 #1复制

4
a 64 46
275 125
c 11 99
b 46 64

输出 #1复制

64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9

说明/提示

【数据规模与约定】

对于 50%50% 的数据,输入的算式都有三个数据,第一个算式一定有三个数据。

对于所有数据,0

代码:

#include
using namespace std;
int main(){
    int t,a=0,b=0,d,sign,fh=-1,i,count;
    char c[1010];
    cin>>t;
    while(t--){
        getchar();//注意输入格式
        scanf("%[^\n]",c);
        count=0,a=0,b=0;
        if(c[0]>='a'&&c[0]<='c'){//第一种
            if(c[0]=='a') fh=0;
            else if(c[0]=='b') fh=1;
            else if(c[0]=='c') fh=2;
            i=2;
            while(c[i]>='0'&&c[i]<='9'){
                a=a*10+c[i]-'0';
                count++;
                sign=i;//标记下一个数的开始 
                i++;
            }
            i=sign+2;
            while(c[i]>='0'&&c[i]<='9'){
                count++;//数字位数 
                b=b*10+c[i]-'0';
                i++;
            } 
        }
        else if(c[0]>='0'&&c[0]<='9'){//第二种
            i=0;
            while(c[i]>='0'&&c[i]<='9'){
                a=a*10+c[i]-'0';
                count++;
                sign=i;//标记下一个数的开始 
                i++;
            }
            i=sign+2;
            while(c[i]>='0'&&c[i]<='9'){
                count++;//数字位数 
                b=b*10+c[i]-'0';
                i++;
            } 
        }
        if(fh==0){
            d=a+b;
            printf("%d+%d=%d\n",a,b,d); 
        }
        else if(fh==1){
            d=a-b;
            printf("%d-%d=%d\n",a,b,d); 
        }
        else if(fh==2){
            d=a*b;
            printf("%d*%d=%d\n",a,b,d); 
        }
        if(d<0) count++;
        while(d){
            count++;
            d/=10;
        }
        cout<     }
}

碎碎念:

全错了,一个点也过不去,明明我在dev上第一个测试点是对的啊。本以为只有几个点过不去的,因为a和b的结果是负号的情况没考虑,结果全错了,QAQ。嗐,怀疑人生了,好久没静下心好好写题了。嗐,加油吧。

2024.1.28:

我又来了,嗐,新问题,dev上是对的,测了好几个样例,都是对的,应该没什么问题,结果还是零蛋。全是re了(运行时错误),找不到原因。本以为是string的问题,换成字符数组也不行。

代码:

#include
using namespace std;
//string ys;//,Ans;
char ys[100],Ans[100];
int main(){
    int t;
    cin>>t;//题数 
    int fh;
    long long num;//运算数的结果 
    int n1,n2;//运算数 
    int sign;//分割两个运算数 
    int flag;//结果为负数 
    //getchar();
    while(t--){
        flag=0;
        int cnt=0;//字数 
        int ans=0;//字数 
        n1=0,n2=0;
        getchar();
        scanf("%[^\n]",ys);//get_s(ys);//getline(cin,ys);//cin>>ys;
        if(ys[0]=='a') fh=1;//加
        else if(ys[0]=='b') fh=2;//减
        else if(ys[0]=='c') fh=3;//乘 
        //for(int i=0;i         //    cout<         //}
        if(ys[0]>='a'&&ys[0]<='c'){//
            for(int i=2;;i++){
                if(ys[i]==' ') {
                    sign=i+1;
                    break;    
                }
                n1=n1*10+ys[i]-'0';
                cout<                 cnt++;
            }
        }
        else{
            for(int i=0;;i++){
                if(ys[i]==' ') {
                    sign=i+1;
                    break;    
                }    
                n1=n1*10+ys[i]-'0';
                cout<                 cnt++;
            }
        }
        if(fh==1) cout<<'+';
        else if(fh==2) cout<<'-';
        else if(fh==3) cout<<'*';
        cnt++;
        for(int i=sign;i             n2=n2*10+ys[i]-'0';
            cout<             cnt++;
        }
        if(fh==1) num=n1+n2;
        else if(fh==2) num=n1-n2;
        else if(fh==3) num=n1*n2;
        if(num<0) {
            flag=1;
            num=-num;
            cnt++;
        }
        cout<<'=';
        cnt++;
        if(num==0){
            cout<<0<             if(t!=0)
                cout<             continue;
        }
        if(flag==1) cout<<'-';
        while(num){
            Ans[ans++]=num%10+'0';//Ans.push_back(num%10+'0');//Ans[ans++]=num%10+'0';
            num/=10;    
        }
        for(int i=ans-1;i>=0;i--){
            cout<         }
        cout<         if(t!=0)
            cout<     }
}

你可能感兴趣的:(c++)