九度oj 1103

题目描述:

设计一个二次方程计算器

输入:

每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。

输出:

每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。

样例输入:
x^2+x=3x+4
样例输出:
-1.24 3.24
来源:

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

#include <stdio.h>
#include <string>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
        string s;
        while(cin>>s)
        {
                int base1 = 1, base2 = 1, count = 1, index = 0;
                float a = 0, b = 0, c = 0;
                while(index != s.length())
                {
                        if(s[index] == 'x')
                        {
                                if(index == s.length() - 1 || s[index + 1] != '^')
                                {
                                        b += (count * base1 * base2 );
                                        index++;
                                }
                                else
                                {
                                        a += (count * base1 * base2);
                                        index += 3;
                                }
                                base2 = 1;
                                count = 1;
                        }
                        else if(s[index] == '=')
                        {
                                base1 = -1;
                                index++;
                        }
                        else if(s[index] == '+')
                                index++;
                        else if(s[index] == '-')
                        {
                                base2 = -1;
                                index++;
                        }
                        else if(s[index] >= '0' && s[index] <= '9')
                        {
                                int temp = s[index] - '0';
                                index++;
                                while(index != s.length() && s[index] >= '0' && s[index] <= '9')
                                {
                                        temp *= 10;
                                        temp += (s[index] - '0');
                                        index++;
                                }
                                if(index == s.length() || s[index] != 'x')
                                {
                                        c += (temp * base1 * base2);
                                        base2 = 1;
                                }
                                else
                                {
                                        count = temp;
                                }
                        }        
                }
                if(b * b - a * c * 4 < 0)
                        printf("No Solution\n");
                else
                        printf("%.2f %.2f\n", (-b - sqrt(b * b - a * c * 4))/ (2 * a), (-b + sqrt(b * b - a * c * 4))/ (2 * a));
        }
        return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值