Openjudge-NOI题库-简单算术表达式求值

题目描述 Description

两位正整数的简单算术运算(只考虑整数运算),算术运算为:

+,加法运算;
-,减法运算;
*,乘法运算;
/,整除运算;
%,取余运算。

算术表达式的格式为(运算符前后可能有空格):
运算数 运算符 运算数

请输出相应的结果。
输入输出格式 Input/output
输入:
一行算术表达式。
输出:
整型算数运算的结果(结果值不一定为2位数,可能多于2位或少于2位)。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
32+64
输出样例:
96
思路:可以先用一个字符串存入这个表达式,分别从前往后,从后往前找数字,从前往后遍历这个数组,在后面一个字符不为空格的情况下,变为数字,从后往前遍历这个数组,在前面一个字符不为空格情况下,变为数字,然后再扫描一遍这个数组看看是什么运算符号,最后判断运算符号输出结果即可。
代码如下:
 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     int n,i;
 6     char a[200];
 7     int f=0,l=0;
 8     gets(a);
 9     for(i=0;i<strlen(a);i++)//首个两位数 
10     {
11         if(a[i]>='0'&&a[i]<='9')//如果是数字 
12         {
13             if(a[i+1]>='0'&&a[i+1]<='9')//如果后面那个也是数字 
14             {
15                 f=(f+a[i]-48)*10;//变为数字往前进一位 
16             }
17             else//否则是空格什么的直接存为数字 
18             {
19                 f=f+a[i]-48;
20                 break;
21             }
22         }
23     } 
24     for(i=strlen(a);i>0;i--)//第二个两位数 
25     {
26         if(a[i]>='0'&&a[i]<='9')//如果是数字
27         {
28             if(a[i-1]>='0'&&a[i-1]<='9')//如果前面那个也是数字 
29             {
30                 l=l+a[i]-48;
31             }
32             else//否则是空格什么的直接存为数字 
33             {
34                 l=l+(a[i]-48)*10;//变为数字往前进一位 
35                 break;
36             }                                             /*  35+14  */
37         } 
38     }
39     for(i=0;i<strlen(a);i++)
40     {
41         if(a[i]=='+') printf("%d\n",f+l);
42         else if(a[i]=='-') printf("%d\n",f-l);
43         else if(a[i]=='*') printf("%d\n",f*l);
44         else if(a[i]=='/') printf("%d\n",f/l);
45         else if(a[i]=='%') printf("%d\n",f%l);
46     } 
47     return 0;
48 }

 

posted @ 2016-07-11 11:13  Memoryヾノ战心  阅读(3066)  评论(0编辑  收藏  举报