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 }
我不怕千万人阻挡,只怕自己投降…