好贷网好贷款

OJ_1103 二次方程计算器

发布时间:2016-12-4 16:17:27 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"OJ_1103 二次方程计算器",主要涉及到OJ_1103 二次方程计算器方面的内容,对于OJ_1103 二次方程计算器感兴趣的同学可以参考一下。

#include <iostream> #include <string> #include <math.h> #include <iomanip> #include <stack> using namespace std; int getnum(string s,int &i) { int sum=0; while(s[i]>='0'&&s[i]<='9') { sum=sum*10+s[i]-'0'; i++; } return sum; } void func() { string s; while(cin>>s) { int flag=1; int a,b,c; a=b=c=0; stack<int> st; for(int i=0;i<s.size();) { if(s[i]>='0'&&s[i]<='9')// 数字先存下来 { int t=getnum(s,i); st.push(flag*t); }else if(s[i]=='x'&&s[i+1]=='^')// 二次项 { // 系数没有数字,即为1的情况 if(s[i-1]<'0'||s[i-1]>'9') { st.push(flag); } int t=st.top(); st.pop(); a+=t; i++;//^ i++;//2 i++;// 下一个符号 }else if(s[i]=='x'&&s[i+1]!='^')// 一次项 { // 系数没有数字,即为1的情况 if(s[i-1]<'0'||s[i-1]>'9') { st.push(flag); } int t=st.top(); st.pop(); b+=t; i++;// 下一个符号 }else if(s[i]=='+') { flag=1; i++; }else if(s[i]=='-') { flag=-1; i++; } else if(s[i]=='=') { int tmp=0; while(!st.empty()) { tmp+=st.top(); st.pop(); } c+=tmp; a=0-a; b=0-b; c=0-c; i++; } } int tmp=0; while(!st.empty()) { tmp+=st.top(); st.pop(); } c+=tmp; if(a<0) { a=0-a; b=0-b; c=0-c; } double x1,x2; double delta=b*b-4*a*c; if(delta<0) cout<<"No Solution"<<endl; else{ x1=((-1)*(double)b-sqrt(delta))/a/2; x2=((-1)*(double)b+sqrt(delta))/a/2; cout.setf(ios::fixed); cout.precision(2); cout<<x1<<" "<<x2<<endl; } } } int main(int argc, char *argv[]) { //printf("Hello, world\n"); func(); return 0; } 使用栈,同时要注意一些表达式上的细节 1.=号左右两边的问题 2.没有系数的情况实际上是系数为1 题目描述: 设计一个二次方程计算器 输入: 每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。 输出: 每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。 样例输入: x^2+x=3x+4 样例输出: -1.24 3.24

上一篇:概念的内涵和外延
下一篇:Sort Colors

相关文章

相关评论