NOIP---2000---1

NOIP 2000 普及组                 题一   计算器的改良               (18分)

   问题描述   

NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

   43x8

   6a5122a

  -512y0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

   问题求解   

编写程序,解输入的一元一次方程将解方程的结果(精确至小数点后三位)输出至屏幕。

    你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

   样  例  

      输入:

           6a5122a

   输出:

           a0.750

比较简单的一道题目,只需要一边读入一边处理,很容易得到AC

直接来代码

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <string>
 4 #include <iostream>
 5 using namespace std;
 6 int main()
 7 {
 8     char ch,x;
 9     int add=1,side=1,now=0,var=0,num=0;   //add表示正负号 ,side表示等号左边还是右边 ,var表示变量系数 ,num表示常数
10     while (cin>>ch&&ch!='\n'){
11         if (ch=='='){    
12             num+=now*add*side;
13             now=0;
14             add=1;
15             side=-1;
16             continue;
17         }
18         if (ch=='+'){
19             num+=now*add*side;
20             now=0;
21             add=1;
22             continue;
23         }
24         if (ch=='-'){
25             num+=now*add*side;
26             now=0;
27             add=-1;
28             continue;
29         }
30         if (ch>='0'&&ch<='9'){
31             now*=10;
32             now+=int (ch-'0');
33             continue;
34         }
35         x=ch;
36         var+=now*add*side;
37         now=0;
38     }
39     num+=side*add*now;
40     printf("%c=%.3lf",x,float(-num)/float(var));
41     return 0;
42 } 

 

你可能感兴趣的:(NOIP---2000---1)