题解 | #二次方程计算器#

二次方程计算器

https://www.nowcoder.com/practice/071f1acaada4477f94193f8c0b9054f4

//将所有变量和常量都移到等式左边,得到aX^2+bX+c=0,在用公式做
#include "stdio.h"
#include "math.h"
#include "string"
#include "iostream"
#include "algorithm"
using namespace std;
string str;

int calculate(int pos){//计算x^2,x前的数字(num1,num2)的位数
    int count = 0;
    for (int i = pos-1; i >= 0; --i) {
        if (str[i] >= '0' && str[i] <= '9'){
            ++count;
            continue;
        } else
            break;
    }
    ++count;
    return count;
}

int calculate2(int pos){//计算普通数字num3的位数
    int count = 0;
    for (int i = pos; str[i] >= '0' && str[i] <= '9'; ++i) {
        ++count;
    }
    return count;
}

int main(){
    ;int sum1=0,sum2=0,sum3=0;//sum1为x^2系数,sum2为x系数,sum3为常数(都移到方程左侧)
    while (getline(cin,str)){
        /*
         * 对str初始化,对x,x^2变成1x,1x^2,开头的再变成+/-1x,+/-x^2,相当于规格化,便于后续处理
         */
        for (int i = 0; i < str.size(); ++i) {//加1
            if (str[i] == 'x'){
                if (str[i-1] == '+' || str[i-1] == '-' || str[i-1] == '=' || i==0){
                    str.insert(i,"1");
                    continue;
                }
            }
            if (str[i] > '0' && str[i] <= '9'){
                if (str[i-1] == '=' || i == 0){
                    str.insert(i,"+");
                    continue;
                }
            }
        }
        if (str[1] == 'x')//加"+"
            str.insert(0,"+");
        int pos_equal = str.find("=");
        if (str[pos_equal+2] == 'x')
            str.insert(pos_equal+1,"+");
        while (str.find("x^2")!=string::npos){//算出sum1 ->a
            int pos = str.find("x^2");
            int count = calculate(pos);
            if (pos < pos_equal){
                sum1 += stoi(str.substr(pos-count,count));
                str.erase(pos-count,count+3);
            } else{
                sum1 -= stoi(str.substr(pos-count,count));
                str.erase(pos-count,count+3);
            }
            pos_equal = str.find("=");
        }
        while (str.find("x") != string::npos){//算sum2 ->b
            int pos = str.find("x");
            int count = calculate(pos);
            if (pos < pos_equal){
                sum2 += stoi(str.substr(pos-count,count));
                str.erase(pos-count,count+1);
            } else{
                sum2 -= stoi(str.substr(pos-count,count));
                str.erase(pos-count,count+1);
            }
            pos_equal = str.find("=");
        }
        for (int i = 0; i < str.size(); ++i) {//算num3
            if (str[i] > '0' && str[i] <= '9'){
                int count = calculate2(i);
                if (i < pos_equal){
                    sum3 += stoi(str.substr(i-1,count+1));
                    str.erase(i-1,count+1);
                } else{
                    sum3 -= stoi(str.substr(i-1,count+1));
                    str.erase(i-1,count+1);
                }
                pos_equal = str.find("=");
            }
        }
        double temp = sum2*sum2*1.0-4*sum1*sum3;
        if (temp<0)
            printf("No Solution\n");
        else{
            double x = (-sum2 - sqrt(temp))/(2*sum1);
            double y = (-sum2 + sqrt(temp))/(2*sum1);
            if (x > y)
                swap(x,y);
            printf("%.2llf %.2llf\n",x,y);
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4588次浏览 33人参与
# 你觉得mentor喜欢什么样的实习生 #
10776次浏览 297人参与
# 未岚大陆求职进展汇总 #
38167次浏览 114人参与
# 帮我看看,领导说这话什么意思? #
6729次浏览 28人参与
# 26届秋招公司红黑榜 #
13421次浏览 44人参与
# 怎么给家人解释你的工作? #
1748次浏览 17人参与
# 平安产险科技校招 #
2440次浏览 0人参与
# 没有家庭托举的我是怎么找工作的 #
12806次浏览 161人参与
# 求职低谷期你是怎么度过的 #
5470次浏览 97人参与
# 实习必须要去大厂吗? #
146898次浏览 1542人参与
# 从哪些方向判断这个offer值不值得去? #
6825次浏览 95人参与
# 同bg的你秋招战况如何? #
158912次浏览 927人参与
# 度小满求职进展汇总 #
10248次浏览 53人参与
# 校招泡的最久的公司是哪家? #
4915次浏览 23人参与
# 面试紧张时你会有什么表现? #
1811次浏览 21人参与
# 你有哪些缓解焦虑的方法? #
37215次浏览 835人参与
# 你喜欢工作还是上学 #
77633次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85528次浏览 467人参与
# 秋招想进国企该如何准备 #
97761次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103636次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25100次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28161次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务