ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1022计算器の改良

2019-06-14 15:00:06  阅读:290  来源: 互联网

标签:未知数 系数 改良 int 扫描 P1022 计算器 常数 include


传送

这个题让你通过自己的努力,来写一个可以解一元一次方程的计算题(麻麻再也不用担心我计算错了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

标签:未知数,系数,改良,int,扫描,P1022,计算器,常数,include
来源: https://www.cnblogs.com/lcez56jsy/p/11023268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有