求助,只有#4对了,#1#2没识别出来未知数,未知数输出的是_!
查看原帖
求助,只有#4对了,#1#2没识别出来未知数,未知数输出的是_!
602932
NumberTrart楼主2022/7/13 15:24
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
double xl,xr,nl,nr;
string s,g;
int s2i(string s)
{
    stringstream ss;
    ss<<s; 
    int i;
    ss>>i;
    return i;
}
int main()
{
    cin>>s;
    string sl=s.substr(0,s.find('=')),sr=s.substr(s.find('=')+1);
    char c='_';
    string lb[1005]={""},rb[1005]={""};
    int k=0,lcnt=0,rcnt=0;
    while(sl.find('+',1)!=string::npos || sl.find('-',1)!=string::npos)
    {
        //break down
        if(sl.find('+',1)!=string::npos && sl.find('-',1)!=string::npos)
            k=min(sl.find('+',1),sl.find('-',1));
        else if(sl.find('+',1)!=string::npos)
            k=sl.find('+',1);
        else
            k=sl.find('-',1);
        lb[++lcnt]=sl.substr(0,k);
        sl=sl.substr(k);
        //read the lb[lcnt]
        if(lb[lcnt][0]!='+' && lb[lcnt][0]!='-')
            lb[lcnt]='+'+lb[lcnt];
        if(lb[lcnt][lb[lcnt].size()-1]<='z' && lb[lcnt][lb[lcnt].size()-1]>='a')
        {
            c=lb[lcnt][lb[lcnt].size()-1];
            if(lb[lcnt][0]=='+')
            {
                g=lb[lcnt].substr(1,lb[lcnt].size()-2);
                xl+=s2i(g);
            }
            else
            {
                g=lb[lcnt].substr(1,lb[lcnt].size()-2);
                xl-=s2i(g);
            }
        }
        else
        {
            if(lb[lcnt][0]=='+')
            {
                g=lb[lcnt].substr(1,lb[lcnt].size()-1);
                nl+=s2i(g);
            }
            else
            {
                g=lb[lcnt].substr(1,lb[lcnt].size()-1);
                nl-=s2i(g);
            }
        }
    }//next
    while(sr.find('+',1)!=string::npos || sr.find('-',1)!=string::npos)
    {
        //break down
        if(sr.find('+',1)!=string::npos && sr.find('-',1)!=string::npos)
            k=min(sr.find('+',1),sr.find('-',1));
        else if(sr.find('+',1)!=string::npos)
            k=sr.find('+',1);
        else
            k=sr.find('-',1);
        rb[++rcnt]=sr.substr(0,k);
        sr=sr.substr(k);
        //read the rb[rcnt]
        if(rb[rcnt][0]!='+' && rb[rcnt][0]!='-')
            rb[rcnt]='+'+rb[rcnt];
        if(rb[rcnt][rb[rcnt].size()-1]<='z' && rb[rcnt][rb[rcnt].size()-1]>='a')
        {
            c=rb[rcnt][rb[rcnt].size()-1];
            if(rb[rcnt][0]=='+')
            {
                g=rb[rcnt].substr(1,rb[rcnt].size()-2);
                xr+=s2i(g);
            }
            else
            {
                g=rb[rcnt].substr(1,rb[rcnt].size()-2);
                xr-=s2i(g);
            }
        }
        else
        {
            if(rb[rcnt][0]=='+')
            {
                g=rb[rcnt].substr(1,rb[rcnt].size()-1);
                nr+=s2i(g);
            }
            else
            {
                g=rb[rcnt].substr(1,rb[rcnt].size()-1);
                nr-=s2i(g);
            }
        }
    }
    //真正解方程在这里
    //      xl*x+nl=xr*x+nr
    //解:xl*x+nl-nl=xr*x+nr-nl
    //         xl*x=xr*x+nr-nl
    //    xl*x-xr*x=xr*x+nr-nl-xr*x
    //    (xl-xr)*x=nr-nl
    double x=(nr-nl)/(xl-xr);
    cout<<c<<'=';
    printf("%.3lf",x);
    return 0;
}
2022/7/13 15:24
加载中...