论本蒟蒻3小数,70行才AC一道黄题,到底是题难还是思路不行……
  • 板块灌水区
  • 楼主最靓的哥
  • 当前回复21
  • 已保存回复21
  • 发布时间2022/8/14 21:09
  • 上次更新2023/10/27 15:25:12
查看原帖
论本蒟蒻3小数,70行才AC一道黄题,到底是题难还是思路不行……
533436
最靓的哥楼主2022/8/14 21:09

P1022 [NOIP2000 普及组] 计算器的改良

#include<iostream>
#include<cstdio>
using namespace std;
string s;
int lc,lx,rc,rx,num,i,t; 
//lc左常数 lx左系数 rc右常数 rx右系数 
bool sym=0;//0为正,1为负 
char ch;
int main(){
    cin>>s;
    if(s[0]=='-')s='0'+s;
    for(i=0;s[i]!='=';i++){
        if(s[i]>='0'&&s[i]<='9'){
            while(s[i]>='0'&&s[i]<='9'){
                num=num*10+s[i]-'0';
                i++;
            }
            if(s[i]>='a'&&s[i]<='z'){
                if(sym)num*=-1;
                lx+=num;
                ch=s[i];
            }
            else if(s[i]=='+'||s[i]=='-'||s[i]=='='){
                if(sym)num*=-1;
                lc+=num; 
                sym=(s[i]=='+')?0:1;
                if(s[i]=='=')break;
            }
            num=0;
        }
        else if(s[i]=='+'||s[i]=='-'){
            sym=(s[i]=='+')?0:1;
        }
        else if(s[i]>='a'&&s[i]<='z'){
            ch=s[i];
            lx+=(sym)?-1:1;
        }
    }
    t=i+1,num=0,sym=0;
    for(i=t;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            while(s[i]>='0'&&s[i]<='9'){
                num=num*10+s[i]-'0';
                i++;
            }
            if(s[i]>='a'&&s[i]<='z'){
                if(sym)num*=-1;
                rx+=num;
                ch=s[i];
            }
            else if(s[i]=='+'||s[i]=='-'||i==s.size()){
                if(sym)num*=-1;
                rc+=num;
                sym=(s[i]=='+')?0:1;
            }
            num=0;
        }
        else if(s[i]=='+'||s[i]=='-'){
            sym=(s[i]=='+')?0:1;
        }
        else if(s[i]>='a'&&s[i]<='z'){
            ch=s[i];
            rx+=(sym)?-1:1;
        }
    }
    int x=lx+(rx*-1),c=rc+(lc*-1);
    double ans=c*1.0/x;
    printf("%c=%.3lf",ch,(ans==-0.000)?-ans:ans);
    return 0;
}

欢迎大家吐槽(纯属娱乐,非讨论学术)

2022/8/14 21:09
加载中...