(水题)洛谷 - P1022 - 计算器的改良

https://www.luogu.org/problemnew/show/P1022

服了,居然还有+0.000和-0.000的不同,真的服了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

//a1x+b1=a2x+b2
double a1,b1,a2,b2;


int main(){
    string s;
    string s1;
    string s2;
    while(cin>>s){
        int n=s.length();

        char c;

        for(int i=0;i<n;i++){
            if(s[i]=='='){
                s1=s.substr(0,i);
                s2=s.substr(i+1,n);
                break;
            }
        }

        int n1=s1.length();
        int n2=s2.length();

        //cout<<s1<<" "<<s2<<endl;

        double cur=0;
        double flag=1;
        for(int i=0;i<n1;i++){
            if(s1[i]=='-'){
                b1+=flag*cur;
                flag=-1;
                cur=0;
            }
            else if(s1[i]=='+'){
                b1+=flag*cur;
                flag=+1;
                cur=0;
            }
            else if(isalpha(s1[i])){
                c=s1[i];
                if(cur==0)
                    cur=1;
                a1+=flag*cur;
                cur=0;
            }
            else{
                cur*=10;
                cur+=(s1[i]-'0');
            }
        }

        b1+=flag*cur;
        flag=1;
        cur=0;

        //cout<<a1<<" "<<b1<<endl;

        for(int i=0;i<n2;i++){
            if(s2[i]=='-'){
                b2+=flag*cur;
                flag=-1;
                cur=0;
            }
            else if(s2[i]=='+'){
                b2+=flag*cur;
                flag=+1;
                cur=0;
            }
            else if(isalpha(s2[i])){
                c=s2[i];
                if(cur==0)
                    cur=1;
                a2+=flag*cur;
                flag=+1;
                cur=0;
            }
            else{
                cur*=10;
                cur+=(s2[i]-'0');
            }
        }

        b2+=flag*cur;
        flag=1;
        cur=0;

        //cout<<a2<<" "<<b2<<endl;

        //ax=b
        double a=a1-a2;
        double b=b2-b1;

        double ans=b/a;
        if(fabs(ans)<1e-6)
            ans=0;
        printf("%c=%.3f\n",c,ans);
    }

}

 

posted @ 2019-01-24 19:32  韵意  阅读(272)  评论(0编辑  收藏  举报