您的位置:首页 > 其它

九度 oj 题目1103:二次方程计算器

2017-02-05 11:06 267 查看
http://ac.jobdu.com/problem.php?pid=1103

#include <stdio.h>
#include <cstring>
#include <cmath>

static int a,b,c,symbol,left;

void read_equalor(char line[]){
int len = (int) strlen(line);
int i = 0,temp=0;

while(i<len){
if('0'<=line[i]&& line[i] <='9' ){
temp *=10;
temp += line[i] - '0';
i++;
}else if((line[i] == 'x' || line[i] == 'X' )
&& (i+1<len && line[i+1] == '^')) {
if(temp != 0) a = a + symbol * left * temp;
else a = a + symbol * left * 1;
temp = 0;
symbol = 1;
i = i + 3;
}else if(line[i] == 'x' || line[i] == 'X' ){
if(temp != 0) b = b + symbol * left * temp;
else b = b + symbol * left * 1;
temp = 0;
symbol = 1;
i++;
}else if (line[i] == '+'){
if(temp != 0) c = c + symbol * left * temp;
symbol = 1;
temp = 0;
i++;
}else if(line[i] == '-'){
if(temp != 0) c = c + symbol * left * temp;
symbol = -1;
temp = 0;
i++;
}else if(line[i] == '=') {
if(temp != 0) c = c + symbol * left * temp;
symbol = 1;
left = -1;
temp = 0;
i++;
}else {
i++;
}
}
if(temp != 0) c = c + symbol * left * temp;
}

int main(){
//freopen("in/1103.in","r",stdin);
char line[200];
while(gets(line) !=NULL){
symbol = 1,left = 1;
a = b = c = 0;
read_equalor(line);
//printf("%d %d %d\n",a,b,c);
double r1,r2,delta;
delta = b * b - 4 * a * c;
if(delta <-1e-5) printf("No Solution\n");
else{
r1 = (-b-sqrt(delta))/(2*a);
r2 = (-b+sqrt(delta))/(2*a);
printf("%.2lf %.2lf\n",a >0 ? r1: r2,a >0? r2:r1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: