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

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

题目描述

设计一个二次方程计算器

输入描述:

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

输出描述:

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

输入

复制

x^2+x=3x+4

输出

复制

-1.24 3.24

参考链接写的代码:

#include <iostream>
#include<stdio.h>
#include<algorithm>
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<L; i++){if(s[i]=='='){flag=-1;sign=1;i++;}if(s[i]=='+'){sign=1;i++;}else if(s[i]=='-'){sign=-1;i++;}while(s[i]>='0'&&s[i]<='9'&&i<L) //如果是数字且在长度范围内{temp=temp*10+(s[i]-'0');i++;}if(temp!=0||i==L){if(i==L||s[i]!='x') //常数项{c+=temp*flag*sign;i--;}else if(i==L-1||s[i+1]!='^')  //一次项,s[i]一定是x,因为上边判断过了是常数项。。{b+=temp*flag*sign;}else{a+=temp*flag*sign;   //二次项i+=2;}}else{if(i==L-1||s[i+1]!='^')b+=1*flag*sign;else{a+=1*flag*sign;i+=2;}}temp=0;}int pd=b*b-4*a*c;if(pd<0)printf("No Solution");else{double delta=sqrt(1.0*pd);double x1=(-b+delta)/(2*a);double x2=(-b-delta)/(2*a);if(x1>x2) 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

二次方程计算器-字符串处理相关推荐

  1. 九度OJ 1103:二次方程计算器 (解方程)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2804 解决:633 题目描述: 设计一个二次方程计算器 输入: 每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式. 输 ...

  2. 牛客-计算机考研复试上机题-二次方程计算器

    这道题其实考察的是对字符串的处理. 显然我们要将方程化为ax2+bx+c=0的形式,因此可以找出式子中所有x2.x的系数以及c.但是题目的输入是一个完整的字符串,如果暴力遍历的话会很麻烦,于是就想到把 ...

  3. 题目1103:二次方程计算器

    java实现: import java.util.Scanner; import java.io.IOException; import java.io.FileReader; import java ...

  4. 【小白练习】一元二次方程计算器

    基于math函数库制作(实际上不使用函数库也不影响实现) import math# 赋值区 a= b= c=# 计算区 delta = b ** 2 - 4 * a * c (-b + math.sq ...

  5. 211大学计算机复试不机试,复试机试之上海交通大学计算机研究生机试真题.doc...

    复试机试之上海交通大学计算机研究生机试真题 (你自己回去改格式啊,这个有多重繁杂字体,你自己改好看点~~还有知识05年到11年的)复试机试之2011年上海交通大学计算机研究生机试真题 (2012-02 ...

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

    http://ac.jobdu.com/problem.php?pid=1103 二次方程计算器 #include<iostream> #include<cstdio> #in ...

  7. 计算机考研 机试书籍及相关的资料

    1.算法笔记(2016.07) 2.算法笔记上机训练实战指南(2016.07) 3.计算机考研--机试指南(第2版)-2019.11 <计算机考研-机试指南>- 1经典入门 https:/ ...

  8. php中md5加密函数怎么用,PHP加密函数—md5()函数加密实例用法

    PHP加密函数-md5()函数加密 什么是MD5()函数? MD5()函数是计算器字符串的 MD5散列值,使用MD5的算法,MD5的全称是Message-Digest Algorithm 5,它的作用 ...

  9. input文本框输入与输出(简单举例)

    以一元二次方程计算器简单举例 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...

最新文章

  1. java 月第一天_java获取当前月第一天和最后一天
  2. springboot集成kaptcha 2.3.2
  3. 下雨天我叫了顿外卖,就成了人渣?
  4. IT餐馆—第二十五回 结对
  5. golang 的time包之time
  6. pyhton的切片操作
  7. 项目中better-scroll的常用配置、插件介绍
  8. JS五彩连珠小游戏(Canvas绘制)
  9. gcc编译出错collect2: error: ld returned 1 exit status的解决办法
  10. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4
  11. Java学习总结篇一初识jvav
  12. Web端测试——F12的代码调试与抓包
  13. ESP32-CAM拍照输出RGB565数据,wifi传输到stm32控制tft屏显示拍照图像
  14. java毕业生设计园艺生活网站计算机源码+系统+mysql+调试部署+lw
  15. java毕业设计——基于java+Socket+sqlserver的办公自动化系统设计与实现(毕业论文+程序源码)——办公自动化系统
  16. ffmpeg+easydarwin+ffplay实现直播推拉流
  17. C#语言和SQL Server 数据库技术_用表组织数据
  18. 基于python的接口录制平台的设计与开发
  19. IHE测试系列之三:测试要求
  20. 身价过亿的帝都富豪对小码农说预处理学的不错

热门文章

  1. Binding的详细说明
  2. cocos creator |《合成大西瓜》源码 解读
  3. 简单、强大的swig.js
  4. 【分治】大整数乘法(C++)
  5. ios设备苹果手机 js时间字符串转时间戳后显示错误NAN
  6. 【面试总结系列】CSS 预编译器 Sass、Less、Stylus 三者之间的比较详解
  7. Jupyter使用技巧+快捷键【速查手册】
  8. Vue.js实战——内置指令(一)
  9. 【NLP入门教程】五、命名实体识别
  10. java程序怎么写_java程序怎么写