OJ_1103 二次方程计算器
来源:互联网 发布:双赢物流软件下载 编辑:程序博客网 时间:2024/05/20 18:00
#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
0 0
- OJ_1103 二次方程计算器
- 一元二次方程计算器
- 题目1103:二次方程计算器
- 设计一个二次方程计算器
- jobdu 1103 二次方程计算器
- 题目1103:二次方程计算器
- 九度 1103:二次方程计算器
- 九度[1103]-二次方程计算器
- 九度OJ 1103 二次方程计算器
- 九度oj 题目1103:二次方程计算器
- 九度OJ 1103 二次方程计算器
- 九度 oj 题目1103:二次方程计算器
- 九度OJ-1103:二次方程计算器
- 二次方程
- 正则表达式练习之题目1103:二次方程计算器
- 九度 Online Judge 算法 刷题 题目1103:二次方程计算器
- 九度OJ 1103:二次方程计算器 (解方程)
- 分享下自己写的二次方程计算器(python)
- 黑马程序员--学习笔记/IO流2
- web编码机制
- 如何允许 WinXP 和 Win7 自动创建 dump 文件
- CodeForces 374A Inna and Pink Pony
- OJ_1101
- OJ_1103 二次方程计算器
- Sort Colors
- stl-map stl-pair
- 黑马程序员--学习笔记/IO流3
- Real World Haskell 读书笔记(2)类型与函数
- 关联,聚合,组合的区别及C++实现
- R6010 abort() has been called
- Win7下安装Ubuntu-64或Ubuntu-32(Ubuntu 12.04.3 LTS)
- ---第一篇文章,开始我的博客之旅---