题目描述:
设计一个二次方程计算器
输入:
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
输出:
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
样例输入:
x^2+x=3x+4
样例输出:
-1.24 3.24
设计一个二次方程计算器
输入:
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
输出:
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
样例输入:
x^2+x=3x+4
样例输出:
-1.24 3.24
注意要考虑系数是多位数字的情况。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
char str[256],destr[256][256];
int a,b,c;
int i,j,k,m,n;
int flag;
double x1,x2;
while(scanf("%s",str)!=EOF){
for(m=0;m<256;m++)
{
memset(destr[m], 0x00, sizeof (char) * 256);
}
a=0,b=0,c=0;
j=0,k=0;
flag=0;//µÈÓÚºÅÊÇ·ñÕÒµ½
destr[j][k] = str[0];
k++;
for(i=1;str[i]!='\0';i++)
{
if(str[i] == '+')
{
if(flag==0)
{
j++;
k=0;
}
else
{
j++;
k=0;
destr[j][k]='-';
k++;
}
}
else if(str[i] == '-')
{
if(flag==0)
{
j++;
k=0;
destr[j][k]='-';
k++;
}
else
{
j++;
k=0;
}
}
else if(str[i] == '=')
{
if(str[i+1]!='-')
{
flag = 1;
j++;
k=0;
destr[j][k]='-';
k++;
}
else
{
flag = 1;
// j++;
// k=0;
}
}
else
{
destr[j][k] = str[i];
k++;
}
}
// for(m=0;m<=j;m++)
// {
// puts(destr[m]);
// }
for(m=0;m<=j;m++)
{
n=0;
while((destr[m][n]-'0'>=0 && destr[m][n]-'0'<=9) || destr[m][n]=='-')
{
n++;
}
if(destr[m][n]=='\0')
{
c += atoi(destr[m]);
}
else
{
if(destr[m][n+1]=='\0')
{
if(n!=0)
{
if(destr[m][n-1]!='-')
{
destr[m][n]='\0';
b += atoi(destr[m]);
}
else
{
b += -1;
}
}
else
{
b += 1;
}
}
else
{
if(n!=0)
{
if(destr[m][n-1]!='-')
{
destr[m][n]='\0';
destr[m][n+1]='\0';
a += atoi(destr[m]);
}
else
{
a += -1;
}
}
else
{
a += 1;
}
}
}
}
if(b*b-4*a*c < 0)
{
printf("No Solution\n");
}
else
{
x2 = (sqrt(b*b-4*a*c) - b)/(2*a);
x1 = (-sqrt(b*b-4*a*c) - b)/(2*a);
printf("%.2lf %.2lf\n",x1,x2);
}
}
return 0;
}