1015 计算器的改良

版权声明:欢迎转载!拒绝抄袭. https://blog.csdn.net/qq_36257146/article/details/83176294

NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

   4+3x=8

   6a-5+1=2-2a

  -5+12y=0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。

    你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

输入描述 Input Description

一个一元一次方程

输出描述 Output Description

方程的解

样例输入 Sample Input

6a-5+1=2-2a

样例输出 Sample Output

a=0.750

数据范围及提示 Data Size & Hint

注意加减号都是半角

#include <iostream>
#include <ctype.h>
#include <cstdio>

using namespace std;

string s;

int main()
{
    int i = 0;
    int add = 1;//现在的符号
    int res = 1;//左边还是右边
    int temp = 0;
    int before = 0;//之前有没有数字
    double R = 0;//右边的数
    double L = 0;//左边的数
    double sum;
    char c;
    cin>>s;
    while(i<s.length())
    {
        //如果是数字
        if(s[i]>='0'&&s[i]<='9')
        {
            before = 1;
            while(s[i]>='0'&&s[i]<='9')
            {
                temp = temp*10+s[i]-'0';
                i++;
            }
            i--;
            temp = temp*res*add;
            add = 1;
        }

        //如果是符号的话
        if(s[i]>='a'&&s[i]<='z')
        {
            c = s[i];
            if(before)
            {
                L+=temp;before = 0;
            }
            temp = 0;
        }

        //如果是加减号
        if(s[i]=='-'||s[i]=='+'||s[i]=='=')
        {
            if(before)
            {
                R+=temp;before = 0;
            }
            temp = 0;
            if(s[i]=='-') add = -1;
            else if(s[i]=='+') add = 1;
            else if(s[i]=='=')
            {
                res = -1;
            }
        }
        //如果是末尾了
        if(temp!=0&&i==s.length()-1)
            R+=temp;
        i++;
    }
    //cout<<L<<endl;
    //cout<<-R<<endl;
    sum = R*1.000/L;
    if(sum==0)
    {
        printf("%c=%.3f",c,sum);
    }
    else
    printf("%c=%.3f",c,-sum);
    return 0;
}

/**47-2=6y+3**/
/**4+3x=8**/

猜你喜欢

转载自blog.csdn.net/qq_36257146/article/details/83176294