2011年上海交通大学计算机研究生机试真题

这篇博客分享了2011年上海交通大学计算机研究生入学考试的机试真题,重点是设计并实现一个二次方程计算器。
摘要由CSDN通过智能技术生成

http://ac.jobdu.com/problem.php?pid=1103 二次方程计算器

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

int main(void)
{
	int i,index,a,b,c,m,sign,ra,rb,rc;
	char str[200];
	double rt,first,second;
	while(scanf("%s",str)!=EOF)
	{
		for(i=0;str[i]!='\0';i++)
		{
			if(str[i]=='=')
			{
				index=i;
				break;
			}
		}
		a=b=c=0;
		m=0,sign=1;
		for(i=0;i<index;)    //方程等式的左半部分
		{
			if(str[i]>='0' && str[i]<='9')
			{
				m=m*10+str[i]-'0';
				i++;
			}
			else if(str[i]!='x')
			{
				if(str[i]=='+')
				{
					c+=m*sign;
					sign=1;
				}
				else if(str[i]=='-')
				{
					c+=m*sign;
					sign=-1;
				}
				i++;
				m=0;
			}
			else if(str[i]=='x' && str[i+1]=='^')
			{
				if(i==0 || str[i-1]=='+' || str[i-1]=='-')
					m=1;
				a+=m*sign;
				m=0;
				i=i+3;
			}
			else if(str[i]=='x' && str[i+1]!='^')
			{
				if(i==0 || str[i-1]=='+' || str[i-1]=='-')
					m=1;
				b+=m*sign;
				m=0;
				i++;
			}
		}//for
		c+=m*sign;

		ra=rb=rc=0;
		m=0,sign=1;
		for(i=index+1;str[i]!='\0';)    //方程等式的右半部分
		{
			if(str[i]>='0' && str[i]<='9')
			{
				m=m*10+str[i]-'0';
				i++;
			}
			else if(str[i]!='x')
			{
				if(str[i]=='+')
				{
					rc+=m*sign;
					sign=1;
				}
				else if(str[i]=='-')
				{
					rc+=m*sign;
					sign=-1;
				}
				i++;
				m=0;
			}
			else if(str[i]=='x' && str[i+1]=='^')
			{
				if(i==index+1 || str[i-1]=='+' || str[i-1]=='-')
					m=1;
				ra+=m*sign;
				m=0;
				i=i+3;
			}
			else if(str[i]=='x' && str[i+1]!='^')
			{
				if(i==index+1 || str[i-1]=='+' || str[i-1]=='-')
					m=1;
				rb+=m*sign;
				m=0;
				i++;
			}
		}//for
		rc+=m*sign;
		a-=ra;
		b-=rb;
		c-=rc;
		if(b*b-4*a*c>=0)
		{
			rt=sqrt(1.0*b*b-4*a*c);
			if(a>0)
			{
				first=(-b-rt)/(2*a);
				second=(-b+rt)/(2*a);
			}
			else
			{
				first=(b+rt)/(-2*a);
				second=(b-rt)/(-2*a);
			}
			if(first<second)
				printf("%.2lf %.2lf\n",first,second);
			else
				printf("%.2lf %.2lf\n",second,first);
		}
		else
			printf("No Solution\n");
	}
	return 0;
}

// 3x+4=x^2+x
// -x^2=0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值