zoukankan      html  css  js  c++  java
  • 1103.二次方程计算器

    题目描述:

    设计一个二次方程计算器

    输入:

    每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。

    输出:

    每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。

    样例输入:
    x^2+x=3x+4
    样例输出:
    -1.24 3.24
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<iomanip> 
    using namespace std;
    
    void operate(string str,int &a,int &b,int &c){
        for(int i=0;i<str.length();i++){
            if(str[i]=='+') continue;
            else if(str[i]=='-'){
            } else if(str[i]=='x'){
                if(i+1<str.length()&&str[i+1]=='^'){
                    if(i-1>=0&&str[i-1]=='-')
                    a=a-1;
                    else a+=1;
                    i+=3;
                }
                else {
                    if(i-1>=0 &&str[i-1]=='-')
                    b--;
                    else b++;
                    i++;
                }
            }
            else {
                int temp=0;
                int j=i;
                while(isdigit(str[i])){
                    temp=temp*10+str[i]-'0';
                    i++;
                }
                if(j-1>=0&&str[j-1]=='-')
                temp=0-temp;
                if(i<str.length()&&str[i]=='x'){
                    if(i+1<str.length()&&str[i+1]=='^'){
                        a+=temp;
                        i+=3;
                    }
                    else {
                        b+=temp;
                        i++;
                    }
                }
                else c+=temp;
            }
        }
    }
    
    int main(){
        string str;
        while(cin>>str){
            int j=0;
            for(int i=0;i<str.length();i++){
                if(str[i]=='=')
                j=i;
            }
            string strleft,strright;
            strleft=str.substr(0,j);
            strright=str.substr(j+1);
            int a1=0,b1=0,c1=0;
            int a2=0,b2=0,c2=0;
            operate(strleft,a1,b1,c1);
            operate(strright,a2,b2,c2);
            int a=a1-a2;
            int b=b1-b2;
            int c=c1-c2;
            int temp=b*b-4*a*c;
            if(temp<0) cout<<"No Solution"<<endl;
            else {
                double x1,x2;
                x1=(double)(0-b+sqrt(temp))/(2*a);
                x2=(double)(0-b-sqrt(temp))/(2*a);
                if(x1<x2)
                cout<<fixed<<setprecision(2)<<x1<<" "<<x2<<endl;
                else
                cout<<fixed<<setprecision(2)<<x2<<" "<<x1<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    算法
    日常
    算法
    算法
    算法
    算法
    NaviCat连接mysql出现加密方式错误的解决方案:
    Sql sugar的使用
    报表体联查详情页面
    第一次用临时表的感受:
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9736488.html
Copyright © 2011-2022 走看看