- 题目描述:
-
设计一个二次方程计算器
- 输入:
-
每个案例是关于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; }
原文地址:https://www.cnblogs.com/bernieloveslife/p/9736488.html
时间: 2024-10-15 00:31:55