#luogu整理 P1022 计算器的改良:模拟

回忆一下自己AC的第一个黄题(模拟

luogu P1022

我们要解一元一次方程,我们就可以把它整理成一般形式(不一定是一般形式,只要能知道系数就行),然后直接根据公式求出来就好。

#include<bits/stdc++.h>
using namespace std;
char in[99999];
int l,r;
int deng;
char a='y';
int xs[99999],zrh[99999];
double xishu,changshu;
int cnt1,cnt2;
int main(){
    cin>>in;
    for(int i=0;i<strlen(in);i++){
        if(in[i]=='='){
            deng=i;
        }
        if((in[i]>'9'||in[i]<'0')&&(in[i]!='-'&&in[i]!='+'&&in[i]!='=')){
            a=in[i];
//			cout<<in[i]<<endl;
        }
    }
//	cout<<a<<endl;
    int asdf=0;
    while(r<strlen(in)){
        l=r;
        asdf=0;
        while(in[r]>='0'&&in[r]<='9'){
            r++;
        }
//		cout<<l<<' '<<r<<" ";
        if((r-l)>=1){
            for(int i=l;i<r;i++){
                asdf=asdf*10+int(in[i]-'0');
            }
            if(in[l-1]=='-') asdf*=-1;
            if(in[r]==a){
                r++;
                if(l<deng) asdf*=-1;
                xs[cnt1]=asdf;
                xishu+=xs[cnt1];
                cnt1++;
            }else{
                if(r>deng) asdf*=-1;
                zrh[cnt2]=asdf;
                changshu+=zrh[cnt2];
                cnt2++;
            }
        }
//		cout<<asdf<<endl;
        r++;
    }
    if(in[0]==a) xishu--;
    double ans;
//    cout<<xishu<<endl;
    ans=double(changshu/xishu);
    if(ans==0) ans=0;
    printf("%c=%.3f",a,ans);
    return 0;
} 
posted @ 2020-04-25 19:46  CYC的幸福生活  阅读(187)  评论(0编辑  收藏  举报