-
题目描述:
-
设计一个二次方程计算器
-
输入:
-
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
-
输出:
-
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
-
样例输入:
-
x^2+x=3x+4
-
样例输出:
-
-1.24 3.24
-
-
注意细节就好了,没有0系数好像,由小到大输出,公式要用对,因为少了个负号计算结果一直很诡异。。
-
-
#include <stdio.h> #include <string.h> #include <math.h> char buf[100]; double a, b, c; double m; void process(int s, int e) { double tmp = 1, ans = 0; if(buf[s] == '+') { tmp = 1; s++; } else if(buf[s] == '-') { tmp = -1; s++; } bool flag1 = false, flag2 = false; while(s <= e) { if(buf[s] >= '0' && buf[s] <= '9') { ans *= 10; ans += buf[s] - '0'; } if(buf[s] == 'x') flag1 = true; if(buf[s] == '^') { flag2 = true; break; } s++; } if(flag2 == true) { if(ans == 0) a += 1 * tmp * m; else a += ans * tmp * m; } else if(flag1 == true) { if(ans == 0) b += 1 * tmp * m; else b += ans * tmp * m; } else c += ans * tmp * m; } int main() { freopen("Test.txt","r",stdin); while(scanf("%s",buf) != EOF) { int len = strlen(buf); a = 0; b = 0; c = 0; m = 1; int i = 1, s = 0; while(i < len) { if(buf[i] == '+' || buf[i] == '-' || buf[i] == '=') { process(s,i-1); //printf("%d %d\n",s,i-1); //printf("%.2lf %.2lf %.2lf\n",a,b,c); if(buf[i] == '+' || buf[i] == '-') s = i; else if(buf[i] == '=') { m = -1; s = i+1; i++; } } if(i == len-1) process(s,i); i++; } //printf("%.2lf %.2lf %.2lf\n",a,b,c); double del = b * b - 4 * a * c; if(del < 0 || abs(a-0) < 1e-9) printf("No Solution\n"); else { double x1 = (-1 * b + sqrt(del)) / (2 * a); double x2 = (-1 * b - sqrt(del)) / (2 * a); if(x1 > x2) { double tmp = x1; x1 = x2; x2 = tmp; } printf("%.2lf %.2lf\n",x1,x2); } //printf("\n"); } return 0; }