二次方程计算器-字符串处理

来源:牛客网-》在线测评-》计算机历年考研复试上机题

参考:https://blog.csdn.net/qq_30339595/article/details/79398506

题目描述

设计一个二次方程计算器

输入描述:

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

输出描述:

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

输入

复制
x^2+x=3x+4

输出

复制
-1.24 3.24

参考链接写的代码:

#include 
#include
#include
using namespace std;

int main()
{
    string s;
    cin>>s;
    int a=0,b=0,c=0;
    int flag=1;
    int sign=1;
    int temp=0;//需要考虑当前的数是正负以及多位数情况
    int L=s.length();
    for(int i=0; i='0'&&s[i]<='9'&&ix2) swap(x1,x2);
        printf("%.2f %.2f",x1,x2);
    }

    return 0;
}

//关键点就是如何处理字符串。

从左到右扫描,系数可能有负数(需要有一个sign来标记),可能是两位数(用while循环来读取)。

遇到的问题:1.在c中输入字符串,只能通过scanf("%s",ch[i]);ch是一个二维数组,如果放一个string的话,会有段错误。

2.在用c输出两位小数时,double类型应该用scanf("%lf",&f);读入,但输出和float类型是一样的,printf("%f",f);没有%lf,会产生输出错误问题。

3.不要判断相等只写一个=啊,造成了死循环。。

边界情况的处理在if判断里,比较麻烦;

当是常数项时,在字符串中间(当前不是x)或者是最后(i==L);当是指数1时,边界情况是(i==L-1)即还剩一个x,或者是i+1不是^(通过判断常数项已经能够判断当前字符是x了);否则就是指数2项。还要判断系数为1的情况,我是通过temp==0来判断,第一次提交时只通过95%的用例,有一个-10x^2-10x=0,结果出错计算得到的b=-11.这就是因为我的判断条件有问题,所以加上了一个temp==0||L==R,就可以了。3h


你可能感兴趣的:(基础算法,字符串)