九度OJ 1103 二次方程计算器

题目描述:

设计一个二次方程计算器

输入:

每个案例是关于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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值