zoukankan      html  css  js  c++  java
  • P1022计算器の改良

    传送

    这个题让你通过自己的努力,来写一个可以解一元一次方程的计算题(麻麻再也不用担心我计算错了qwq)

    我们先学习一下一元一次方程的解法

    step1:移项。把带有未知数的项移到方程的一边,把常数项移到方程的另一边。

    step2:系数化一。方程左右两边同时除以未知数的系数

    step3:写答(最后别忘了输出是"未知数=....."的格式)

        解方程都会,关键是怎么让电脑进行移项。我们在解方程的时候通常把未知数移到左边,常数移到右边,并且在等号右边含有未知数的项是要变号的,在等号左边常数项要变号。所以我们在计算未知数的系数与常数时,可以以等号为划分点,进行计算。

      方程用字符串的形式读入,我们也注意到,每一项的起点是发现“+“ ”-” “=”,终点也是如此。所以我们在没有扫描到符号或未知数时,就继续计算当前项的绝对值,当扫描到下一个符号的时候,就将算好的值按照符号与是否扫描过等号累加(这里分别用k,v记录未知数的系数和所有常数项的和)

      v/k的值即为答案,注意ans如果是-0,要特判,输出正0(虽然这俩没毛区别,但评测机说你错了你就错了)

      一些小坑见代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    char a[1000],c,aa;//aa记录未知数是什么字符
    int m,k,q,v;
    bool dy,xs;//dy标记是否扫描过等号,xs标记是否是含未知数的项(系数)
    int main()
    {
        scanf("%s",a);
        for(int i=0;i<strlen(a);i++)//我们顺序扫描
        {if(a[i]=='+'||a[i]=='-'||a[i]=='=')
          {
           if(dy)//等号右边的项
           {if(xs){if(m==0)m=1;if(c=='-'){k+=m;m=0;}else{k-=m;m=0;}}//注意若未知数前面不写系数,则系数是1
            else{if(c=='-'){v-=m;m=0;}else{v+=m;m=0;}}
            }
           if(!dy)//等号左边的项
           {if(xs){if(m==0)m=1;if(c=='-'){k-=m;m=0;}else{k+=m;m=0;}}
            else{if(c=='-'){v+=m;m=0;}else{v-=m;m=0;}}
           }
           if(a[i]=='=')dy=1;//注意这些的更新顺序
           c=a[i]; //记录符号
           xs=0;
          }
         else if(a[i]>='0'&&a[i]<='9') {m=m*10+a[i]-48;xs=0;} //只有是数字的字符才计算
         else {xs=1;aa=a[i];//记下未知数的字符
         }
        }
        if(xs)//最后一项扫描不到,要补上
         {if(c=='-')k+=m;
          else k-=m;
         }
        else 
        {if(c=='-')v-=m;
         else v+=m;
        }
        double ans;
        if(k!=0)
          ans=1.0*v/k;
        else  ans=0.000; 
       if(ans==-0)ans=0;
       cout<<aa<<"="; printf("%.3lf",ans);
    }

    打了好久qwq

  • 相关阅读:
    Warning: $HADOOP_HOME is deprecated解决方法
    配置hadoop-1.2.1 eclipse开发环境
    Retinex图像增强算法代码
    XML 处理利器 : XStream
    #一周五# win10通用平台,无处不在的Xamarin,msbuild开源,MVP卢建晖的Asp.NET 5系列 (视频)
    javascript两种声明函数的方式的一次深入解析
    Spring AOP (二)
    Spring AOP (一)
    如何成为Android高手
    模拟 POJ 2993 Emag eht htiw Em Pleh
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/11023268.html
Copyright © 2011-2022 走看看