RE求助QAQ

P1957 口算练习题

wyc0809 @ 2023-08-27 11:40:15

各位神犇,本蒟蒻代码如下: 它本地都过不了怎么办QAQ

#include<bits/stdc++.h>
using namespace std;
long long n,a,b,c,ys,kai,biao,ans;
string s; 
void js(long long i){
    if(i<10)    ans=ans+1;
    if(i>=10&&i<100)    ans=ans+2;
    if(i>=100&&i<1000)    ans=ans+3;
    if(i>=1000&&i<10000)    ans=ans+4;
}
int main(){
    //cin>>n;
    for(int i=1;i<=n;i++){
        getline(cin,s);
        //cin>>s;
        kai=0;
        ans=2;
        biao=0;
        a=0;
        b=0;
        if(s[0]>=97&&s[0]<=100){
            if(s[0]=='a')    ys=1;
            if(s[0]=='b')    ys=2;
            if(s[0]=='c')    ys=3;
            kai=2;
            biao=2;
        }
        for(int j=kai;j<=s.size()-1;j++){
            if(s[j]==' '){
                long long wei=1;
                for(int k=j-1;k>=biao;k--){
                    if(wei==1)  a=a+s[k]-'0';
                    else{
                        a=a+(s[k]-'0')*pow(10,wei-1);
                    } 
                    wei++;
                }
                wei=1;
                for(int k=s.size()-1;k>=j+1;k--){
                    if(wei==1)  b=b+s[k]-'0';
                    else{
                        b=b+(s[k]-'0')*pow(10,wei-1);
                    } 
                    wei++;
                }
            }
        }
        js(a);
        js(b);
        cout<<a;
        if(ys==1){
            cout<<"+";
            js(a+b);
            c=a+b;
        }
        if(ys==2){
            cout<<"-";
            js(a-b);
            c=a-b;
        }
        if(ys==3){
            cout<<"*";
            js(a*b);
            c=a*b;
        }
        cout<<b<<"="<<c<<endl;
        cout<<ans<<endl;
    }
    return 0;
}

by jqQt0220 @ 2023-08-27 11:50:52

可以直接用 cin 把第一串数读进来,如果是字母就存下来继续读后面两个数字,否则把他转换成数字读下一个数字。输出的时候可以用 sprintf(s,"%d+%d=%d",a,b,a+b); 这个大法把式子存到字符串里再直接算长度输出(-和*同理)


by wyc0809 @ 2023-09-03 20:51:56

@jqQt0220 还是没大理解怎么输入的可以再展开讲讲吗?谢谢QAQ


by jqQt0220 @ 2023-09-04 19:17:11

先用 cin 读入一串 s 到空格结束,如果 s_{0} 是字母就存下来,再读两个数;否则就把 s 转成数字,可以用常规方法,也可以直接 sscanf(s,"%d",&a);(是从 s 这个字符串里按格式字符串输入),然后读第二个数。读完直接用上面那个方法(就是按格式把输出的东西存到 s 里)再求 s 的长度。但是 s 只能是字符类型数组,不能用 string

具体可以参考这篇题解


|