题目内容

P1022

思路

首先,一个一元一次方程可以化为kx+b=0的形式,然后
kx=-b
x=-\frac{b}{k}
即可解决

难点在于字符串的处理以及一些特判。

代码

#include <cstdio>
#include <cctype>
#include <string>
using namespace std;
int main()
{
    char mode;
    int b=0,k=0,tmp=0;
    bool equal=1,flag=1;
    string s;
    for(int i=0;;i++)
    {
        char c=getchar();
        if(c==EOF) break;
        s[i]=c;
        if(isalpha(c))
        {
            mode=c;
            if(s[i-1]=='-')
            {
                k+=equal?-1:1;
            }
            else if(s[i-1]=='+'||i==0||s[i-1]=='=')
            {
                k+=equal?1:-1;
            }
            else
            {
                k+=equal?tmp:-tmp;
                tmp=0;
            }
        }
        if(isdigit(c))
        {
            tmp*=10;
            tmp+=flag?(c-'0'):-(c-'0');
        }
        if(c=='+')
        {
            flag=1;
            b+=equal?-tmp:tmp;
            tmp=0;
        }
        if(c=='-')
        {
            flag=0;
            b+=equal?-tmp:tmp;
            tmp=0;
        }
        if(c=='=')
        {
            flag=1;
            b+=equal?-tmp:tmp;
            tmp=0;
            equal=0;
        }
        //rintf("c:%c,tmp:%d,k:%d,b:%d,equal:%d,flag:%d\n",c,tmp,k,b,equal,flag);
    }
    if(tmp!=0) b+=tmp;
    //printf(",tmp:%d,k:%d,b:%d,equal:%d,flag:%d\n",tmp,k,b,equal,flag);
    double ans=(double)b/k;
    if(ans==-0.0000) ans=0;
    printf("%c=%.3f",mode,ans);
    return 0;
}

坑点

注意每个符号都要清算一次b

-0和0是两个东西,输出时要把-0输出为0

最后修改日期:2020年1月25日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。