码迷,mamicode.com
首页 > 其他好文 > 详细

1103.二次方程计算器

时间:2018-10-02 17:20:24      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:namespace   +=   substr   cstring   return   ++   mes   length   整数   

题目描述:

设计一个二次方程计算器

输入:

每个案例是关于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;
}

 

1103.二次方程计算器

标签:namespace   +=   substr   cstring   return   ++   mes   length   整数   

原文地址:https://www.cnblogs.com/bernieloveslife/p/9736488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!