codevs 计算器的改良

#include<iostream>
#include<cctype>
#include<vector>
#include<cstdio>
using namespace std;

//
int get_num(string s)
{
    int sum=0;
    for(int i=0;i<s.length();i++)
    {
        int k=s[i]-‘0‘;
        sum=sum*10+k;
    }
    //cout<<sum<<endl;
    return sum;
}

int main()
{
    string s="6a-5+1=2-2a";
    cin>>s;
    vector<string> s0;
    //第一步,实现分离
    char ch;
    int loc=0;
    for(int i=1;i<s.length();i++)
    {
        if(s[i]==‘=‘)
        {
            s0.push_back(s.substr(loc,i-loc));
            s0.push_back("=");
            loc=i+1;
        }
        else if(s[i]==‘+‘||s[i]==‘-‘)
        {
            string tmp=s.substr(loc,i-loc);
            s0.push_back(tmp);
            loc=i;
        }
    }
    s0.push_back(s.substr(loc,s.length()-loc));
    //for(int i=0;i<s0.size();i++)
    //    cout<<s0[i]<<endl;
    //分离后的计算
    int x=0,c=0;
    int f=1;
    for(int i=0;i<s0.size();i++){
        if(s0[i]=="=")
        {
            f=-1;
            continue;
        }
        int kt=s0[i].length();
        if(isalpha(s0[i][kt-1])){
            ch=s0[i][kt-1];
            if(s0[i][0]==‘-‘)
                x-=f*get_num(s0[i].substr(1,kt-2));
            else if(s0[i][0]==‘+‘)
                x+=f*get_num(s0[i].substr(1,kt-2));
            else x+=f*get_num(s0[i].substr(0,kt-1));
        }
        else
        {
            if(s0[i][0]==‘-‘)
                c+=f*get_num(s0[i].substr(1,kt));
            else if(s0[i][0]==‘+‘)
                c-=f*get_num(s0[i].substr(1,kt));
            else c-=f*get_num(s0[i].substr(0,kt));
        }
    }
    //cout<<x<<endl;
    //cout<<c<<endl;
    printf("%c=%.3f",ch,c*1.0/x);
    return 0;
}

一道很简单的题目,但是花了超级多的时间。

http://codevs.cn/problem/1015/

情况很多要依次处理,我是先把他们拆开打散,然后做相应的处理。

主要用到了C++ STL 中的string数据结构类型

原文地址:https://www.cnblogs.com/hxh88/p/9249566.html

时间: 2024-10-11 05:06:23

codevs 计算器的改良的相关文章

洛谷 P1022 计算器的改良

P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数.小写字母及+.-.=这三个数学符号(当然,符号“-”既可作减号,也可作

[NOIP2000] 计算器的改良

47. [NOIP2000] 计算器的改良 ★★   输入文件:computer.in   输出文件:computer.out   简单对比 时间限制:1 s   内存限制:128 MB 问题描述 NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手 ZL 先生.为了很好的完成这个任务 ,ZL 先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2

[NOIP2000] 提高组 洛谷P1022 计算器的改良

题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数.小写字母及+.-.=这三个数学符号(当然,符号“-”既可作减号,也可作负号).方程中并没有括号,

洛谷——P1022 计算器的改良

https://www.luogu.org/problem/show?pid=1022#sub 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数.

洛谷 P1022 计算器的改良 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1022 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=

[luoguP1022] 计算器的改良(模拟)

传送门 超级大模拟.. 代码 #include <cstdio> #include <cstring> #include <iostream> #define isword(x) ((x) >= 'a' && (x) <= 'z') int n, a1, b1, a2, b2, f, x; char s[1001], c; int main() { int i; scanf("%s", s + 1); n = strlen

NOIP2000普及组 T1计算器的改良

主要考字符串处理,把等式从等号中间断开,左边的区域为left,右边的区域为right. 开四个数组分别用来存储区域left和right中未知数的系数,区域left和right中的常数 先处理区域left,把区域left中含有未知数的数字和常数分别存储进数组,再处理区域right(字符串处理这里省略) 最后把存储区域left和right的未知数系数和常数的数组分别化简(合并同类项),进行平时解方程时候的模拟就好了. 主要看代码理解吧,思路讲的有点抽象了. 1 var 2 l_unk,r_unk,l

LGOJ P1022 【计算器的改良 】

依然是自带大常数的\(STL\) 于是乎就有了这个很长的代码 虽然很长但是很傻瓜 但其实就是很傻. 详情看注释 // P1022.cpp: 定义控制台应用程序的入口点. // //#include "stdafx.h" //#include <bits\stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <list> #incl

NOIP2000普及组解题报告

/雾 noip2000发生了什么?为什么洛谷上就一道题- - 计算器的改良 分析:字符串模拟题.记录分别记录等式两边的系数与常数即可.以前在codevs上做过,也就直接把代码贴上来了. #include<iostream> #include<algorithm> #include<cstdio> #include<iomanip> #include<cmath> using namespace std; int main() { char c,l