题记(40)--二次方程计算器

目录

一、题目内容

二、输入描述

三、输出描述

四、输入输出示例

五、完整C语言代码


一、题目内容

设计一个二次方程计算器

二、输入描述

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

三、输出描述

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

四、输入输出示例

输入:

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

输出:

复制代码
-1.24 3.24

五、完整C语言代码

cpp 复制代码
AC代码~

#include<stdio.h>
#include<string.h>
#include<math.h>

int a, b, c;
void subStr(char* s, char* subs, int a, int b) {  // 子串分割函数(将等号左右分成两个表达式)
    int i = 0;
    for (int j = a; j <= b; j++) {
        subs[i] = s[j];
        i++;
    }
    subs[b + 1] = '\0';
}

void process(char* s, int mode) {                // 处理子串函数
    int i = 0;
    int num = 0;
    int flag = 1;
    if (mode == 0) { // 左边等式
        if (s[0] == 'x') {
            if (s[i + 1] != '\0' && s[i + 1] == '^')
                a = 1;
            else
                b = 1;
        }
        while (s[i] != '\0') {
            while ('0' <= s[i] && s[i] <= '9') {
                num = num * 10 + (s[i] - '0');
                i++;
            }
            if (s[i] == 'x') {
                if ((s[i + 1] != '\0' && s[i + 1] != '^') || (s[i + 1] == '\0')) {
                    if (flag == 1)
                        b += num;
                    else
                        b -= num;
                    num = 0;
                    i++;
                } else { // 二次方
                    if (flag == 1)
                        a += num;
                    else
                        a -= num;
                    num = 0;
                    i = i + 3; // 跳过^和次方
                }
            } else if (s[i] == '+') {
                if (s[i + 1] == 'x')
                    b++;
                i++;
                flag = 1;
                num = 0;

            } else if (s[i] == '-') {
                if (s[i + 1] == 'x')
                    b--;
                i++;
                flag = 0;
                num = 0;

            }
        }
        if (flag == 1)
            c += num;
        else
            c -= num;
    } else { // 右边等式
        if (s[0] == 'x') {
            if (s[i + 1] != '\0' && s[i + 1] == '^')
                a = 1;
            else
                b = 1;
        }
        while (s[i] != '\0') {
            while ('0' <= s[i] && s[i] <= '9') {
                num = num * 10 + (s[i] - '0');
                i++;
            }
            if (s[i] == 'x') {
                if ((s[i + 1] != '\0' && s[i + 1] != '^') || (s[i + 1] == '\0')) {
                    if (flag == 1)
                        b -= num;
                    else
                        b += num;
                    num = 0;
                    i++;
                } else { // 二次方
                    if (flag == 1)
                        a -= num;
                    else
                        a += num;
                    num = 0;
                    i = i + 3; // 跳过^和次方
                }
            } else if (s[i] == '+') {
                if (s[i + 1] == 'x')
                    b--;
                i++;
                flag = 1;
                num = 0;

            } else if (s[i] == '-') {
                if (s[i + 1] == 'x')
                    b++;
                i++;
                flag = 0;
                num = 0;

            }
        }
        if (flag == 1)
            c -= num;
        else
            c += num;
    }
}

int main() {
    char s[200], s1[100], s2[100];
    while (gets(s)) {
        int i = 0;
        int len = strlen(s);
        while (s[i] != '=')
            i++;
        subStr(s, s1, 0, i - 1);
        subStr(s, s2, i + 1, len - 1);
        a = b = c = 0;
        process(s1, 0);
        process(s2, 1);
        double der = b * b - 4 * a * c;
        if (der < 0)
            printf("No Solution\n");
        else {
            double x1 = (-b + sqrt(der)) / (2 * a);
            double x2 = (-b - sqrt(der)) / (2 * a);
            if (x1 < x2) {
                double tmp = x1;
                x1 = x2;
                x2 = tmp;
            }
            printf("%.2f %.2f\n", x2, x1);
        }

    }
    return 0;
}
相关推荐
INGNIGHT9 分钟前
单词搜索 II · Word Search II
数据结构·c++·算法
黄卷青灯7730 分钟前
标定系数为什么会存储在相机模组里面,在标定的时候,算法是在割草机的X3板上运行的啊?
数码相机·算法·相机内参
螺丝钉的扭矩一瞬间产生高能蛋白1 小时前
PID算法基础知识
算法
HVACoder2 小时前
复习下线性代数,使用向量平移拼接两段线
c++·线性代数·算法
爱coding的橙子2 小时前
每日算法刷题Day77:10.22:leetcode 二叉树bfs18道题,用时3h
算法·leetcode·职场和发展
Swift社区2 小时前
LeetCode 404:左叶子之和(Sum of Left Leaves)
算法·leetcode·职场和发展
南枝异客2 小时前
查找算法-顺序查找
python·算法
QuantumLeap丶2 小时前
《数据结构:从0到1》-06-单链表&双链表
数据结构·算法
李牧九丶2 小时前
从零学算法59
算法
一匹电信狗3 小时前
【C++】手搓AVL树
服务器·c++·算法·leetcode·小程序·stl·visual studio