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 }
时间: 2024-09-29 04:34:44

Openjudge-NOI题库-简单算术表达式求值的相关文章

简单算术表达式求值

#include <stdio.h> #include <string.h> int main() { int n,i; char a[200]; int f=0,l=0; gets(a); for(i=0;i<strlen(a);i++) { if(a[i]>='0'&&a[i]<='9')//如果是数字 { if(a[i+1]>='0'&&a[i+1]<='9')//如果后面那个也是数字 { f=(f+a[i]-48

Openjudge-计算概论(A)-简单算术表达式求值

描述: 两位正整数的简单算术运算(只考虑整数运算),算术运算为: +,加法运算:-,减法运算:*,乘法运算:/,整除运算:%,取余运算. 算术表达式的格式为(运算符前后可能有空格):运算数 运算符 运算数 请输出相应的结果. 输入一行算术表达式.输出整型算数运算的结果(结果值不一定为2位数,可能多于2位或少于2位). 样例输入 32+64 样例输出 96思路:使用字符串,从前往后扫,直至结束,把符号提出来,进行运算.注意:输入时一定要用gets(char)库函数,否则会报错的!代码如下: 1 #

*1397简单算术表达式求值

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 char a[20]; 5 using namespace std; 6 int js(int x,int y,char f) 7 { 8 switch(f) 9 { 10 case '+':cout<<x+y;break; 11 case '-':cout<<x-y;break; 12 case '*':cout<&

数据结构 -- 整数算术表达式求值 (C/C++)

数据结构题集(C语言版)--严蔚敏,吴伟民编著 设置运算符栈和运算数栈辅助分析运算符有限关系. 读入表达式的字符序列的同时完成运算符和运算数(整数)的识别处理,以及相应的运算. 在识别出运算数的同时,要将其字符序列形式转换成整数形式. 1 /** 2 Function:整数算术表达式求值 3 Date:2014-11-10 4 Author:JackDawson 5 Compiler:gcc version 4.8.1 6 */ 7 #include <iostream> 8 #include

栈的应用—算术表达式求值

例三.算术表达式求值 1.问题描述 当一个算术表达式中含有多个运算符,且运算符的优先级不同的情况下,如何才能处理一个算术表达式????? 2.思路 首先我们要知道表达式分为三类:  ①中缀表达式:a+(b-c/d)*e ②前缀表达式+a*-be ③后缀表达式abcd/-e*+ 由于运算符有优先级,所以在计算机中计算一个中缀的表达式非常困难,特别是带括号的更麻烦,而后缀表达式中既无运算符优先又无括号的约束问题因为在后缀表达式中运算符出现的顺序正是计算的顺序,所以计算一个后缀的表达式更简单.所以,可

算法手记(2)Dijkstra双栈算术表达式求值算法

这两天看到的内容是关于栈和队列,在栈的模块发现了Dijkstra双栈算术表达式求值算法,可以用来实现计算器类型的app. 编程语言系统一般都内置了对算术表达式的处理,但是他们是如何在内部实现的呢?为了了解这个过程,我们可以自行搭建一套简易的算术表达式处理机制,这里就用到栈特性和本篇提到的Dijkstra算法. 概述:     算术表达式可能是一个数.或者是由一个左括号.一个算术表达式.一个运算符.另一个算术表达式和一个右括号组成的表达式.为了简化问题,这里定义的是未省略括号的算术表达式,它明确地

【算法】E.W.Dijkstra算术表达式求值

算术表达式求值 我们要学习的一个栈的用例同时也是展示泛型的应用的一个经典例子,就是用来计算算术表达式的值,例如 ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) 如果将4乘以5,把3加上2,取它们的积然后加上1,就得到了101.但Java系统是如何完成这些运算的呢?不需要研究Java系统的构造细节,我们也可以编写一个Java程序来解决这个问题.它接受一个输入字符串(表达式)并输出表达式的值.为了简化问题,首先来看一下这份明确的递归定义:算术表达式可能是一个数,或者是由一个左括号

page80-栈用例-算术表达式求值

表达式由括号, 运算符和操作数(数字)组成.我们根据以下4中情况从左到右逐个将这些实体送入栈处理. (1)将操作数压入操作数栈: (2)将运算符压入运算符栈: (3)忽略左括号: (4)在遇到右括号时, 弹出一个运算符,弹出所需数量的操作符,并将运算符和操作符的运算结果压入操作数栈. [地杰斯特拉的双栈算术表达式求值算法] public class Evaluate { public static void main(String[] args) { Stack<String> ops = n

Dijkstra的双栈算术表达式求值

import java.util.Stack; import java.util.Scanner; public class Evaluate { public static void main(String[] args) { Stack<String> ops=new Stack<String>(); Stack<Double> vals=new Stack<Double>(); Scanner cin=new Scanner(System.in); /