zoukankan      html  css  js  c++  java
  • 洛谷--P1022 计算器的改良

    队友都在找模板题了,菜鸟般的我还是刷刷题(不要拖队伍后退就知足了)

    不得不承认,看到题目的一瞬间我是蒙的,之前没有遇到解方程这类题型,感觉回到了初中?还是小学,重新拿起手中的笔,开始研究解方程的步骤...

    不过,经历了几次碰壁之后,只用简单的模拟就可以解决了,有时候,真的是空想不如实践呢~

    题目链接:https://www.luogu.org/problem/P1022

    首先,我们先了解一下解方程的步骤:

    1.去分母:在方程两边都乘以各分母的最小公倍数;(题目没有要求) 
    2.去括号:先去小括号,再去中括号,最后去大括号; (题目没有要求)
    3.移项:把含有未知数的项都移到方程的一边,其他项都移到方程的另一边; 为了方便,我们把等式右边的多项式移至左边
    4.合并同类项:把方程化成 ax=b (a≠0) 的形式; 
    5.系数化成1:在方程两边都除以未知数的系数a,得到方程的解

    因为一个方程包含数字、符号、字母,所以我们一个一个读入,用char类型读取,接下来就是一串 if 。。。

    1、对于 + 、 - 、 = 的处理

    b为常数项的值,

    num表示多项式相对于等号的位置,左边为 1 ,右边为 -1,读到等号之后,num则变为-1;

    f 表示多项式的正负性,

    x是系数,读到加号,则常数累加,同理,减号则相减;

    flag 判断读入的是否为数字,如果是数字,则 为1,否则为0,

    2、数字的判断

     3、未知数(小写字母)的判断

    k为未知数的系数,在这里要分为两种情况。因为x的系数可以是1,-1。因此,我们靠flag值来判断未知数前面有没有除这两种情况的系数

    4、特殊情况处理

    浮点数中,存在+0和-0之分,如果出现-x=0的情况,我们则需要把它改为0

     AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char c,ch;//c用于读入,ch记录未知数
     4 int f=1,num=1,k,b,x;
     5 bool flag;  //判断是否有数字
     6 int main() {
     7     while(scanf("%c",&c)!=EOF)
     8     {
     9         if(c=='-')
    10         {
    11             b+=num*f*x;x=0;f=-1;flag=0;
    12         }
    13         if(c=='+')
    14         {
    15             b+=num*f*x;x=0;f=1;flag=0;
    16         }
    17         if(c=='=')
    18         {
    19             b+=num*f*x;x=0;f=1;num=-1;flag=0;
    20         }
    21         if(c>='a'&&c<='z')
    22         {
    23             if(flag)
    24             {
    25                 k+=num*f*x;
    26                 x=0;
    27             }
    28             else
    29                 k+=num*f;
    30                 ch=c;
    31                 flag=0;
    32         }
    33         if(c>='0'&&c<='9')
    34         {
    35             x=x*10+c-'0';
    36             flag=1;
    37         }
    38     }
    39     b+=num*f*x;
    40     double ans=double(-b*1.0/k);
    41     if(ans==-0.0)
    42         ans=0;
    43     printf("%c=%.3lf",ch,ans);
    44     return 0;
    45 }

    希望对大家有帮助!~

  • 相关阅读:
    cve-2015-1635 poc
    Python实现ORM
    Android完全退出应用的方法
    Java反射理解
    Android动画
    Android进程间通信IPC
    Java的四种引用方式
    Android底部菜单的实现
    Android中AsyncTask使用
    Android自定义控件
  • 原文地址:https://www.cnblogs.com/acmer-hmin/p/11743304.html
Copyright © 2011-2022 走看看