二次方程计算器-字符串处理
来源:牛客网-》在线测评-》计算机历年考研复试上机题
参考:https://blog.csdn.net/qq_30339595/article/details/79398506
题目描述
输入描述:
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
输出描述:
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
输入
复制
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
二次方程计算器-字符串处理相关推荐
- 九度OJ 1103:二次方程计算器 (解方程)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2804 解决:633 题目描述: 设计一个二次方程计算器 输入: 每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式. 输 ...
- 牛客-计算机考研复试上机题-二次方程计算器
这道题其实考察的是对字符串的处理. 显然我们要将方程化为ax2+bx+c=0的形式,因此可以找出式子中所有x2.x的系数以及c.但是题目的输入是一个完整的字符串,如果暴力遍历的话会很麻烦,于是就想到把 ...
- 题目1103:二次方程计算器
java实现: import java.util.Scanner; import java.io.IOException; import java.io.FileReader; import java ...
- 【小白练习】一元二次方程计算器
基于math函数库制作(实际上不使用函数库也不影响实现) import math# 赋值区 a= b= c=# 计算区 delta = b ** 2 - 4 * a * c (-b + math.sq ...
- 211大学计算机复试不机试,复试机试之上海交通大学计算机研究生机试真题.doc...
复试机试之上海交通大学计算机研究生机试真题 (你自己回去改格式啊,这个有多重繁杂字体,你自己改好看点~~还有知识05年到11年的)复试机试之2011年上海交通大学计算机研究生机试真题 (2012-02 ...
- 2011年上海交通大学计算机研究生机试真题
http://ac.jobdu.com/problem.php?pid=1103 二次方程计算器 #include<iostream> #include<cstdio> #in ...
- 计算机考研 机试书籍及相关的资料
1.算法笔记(2016.07) 2.算法笔记上机训练实战指南(2016.07) 3.计算机考研--机试指南(第2版)-2019.11 <计算机考研-机试指南>- 1经典入门 https:/ ...
- php中md5加密函数怎么用,PHP加密函数—md5()函数加密实例用法
PHP加密函数-md5()函数加密 什么是MD5()函数? MD5()函数是计算器字符串的 MD5散列值,使用MD5的算法,MD5的全称是Message-Digest Algorithm 5,它的作用 ...
- input文本框输入与输出(简单举例)
以一元二次方程计算器简单举例 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...
最新文章
- java 月第一天_java获取当前月第一天和最后一天
- springboot集成kaptcha 2.3.2
- 下雨天我叫了顿外卖,就成了人渣?
- IT餐馆—第二十五回 结对
- golang 的time包之time
- pyhton的切片操作
- 项目中better-scroll的常用配置、插件介绍
- JS五彩连珠小游戏(Canvas绘制)
- gcc编译出错collect2: error: ld returned 1 exit status的解决办法
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4
- Java学习总结篇一初识jvav
- Web端测试——F12的代码调试与抓包
- ESP32-CAM拍照输出RGB565数据,wifi传输到stm32控制tft屏显示拍照图像
- java毕业生设计园艺生活网站计算机源码+系统+mysql+调试部署+lw
- java毕业设计——基于java+Socket+sqlserver的办公自动化系统设计与实现(毕业论文+程序源码)——办公自动化系统
- ffmpeg+easydarwin+ffplay实现直播推拉流
- C#语言和SQL Server 数据库技术_用表组织数据
- 基于python的接口录制平台的设计与开发
- IHE测试系列之三:测试要求
- 身价过亿的帝都富豪对小码农说预处理学的不错