zoukankan      html  css  js  c++  java
  • 表达式求值(1)

    表达式求值

    描述

    Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。

    假设表达式可以简单定义为:

    1. 一个正的十进制数 x 是一个表达式。

    2. 如果 x 和 y 是 表达式,则 函数min(x,y )也是表达式,其值为x,y 中的最小数。

    3. 如果 x 和 y 是 表达式,则 函数max(x,y )也是表达式,其值为x,y 中的最大数。

    4.如果 x 和 y 是 表达式,则 函数add(x,y )也是表达式,其值为x,y 之和。

    例如, 表达式 max(add(1,2),7) 的值为 7。

    请你编写程序,对于给定的一组表达式,帮助 Dr.Kong 算出正确答案,以便校对卡多计算的正误。

     
    输入
    第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10)  接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不 超过1000。)
    输出
    输出有N行,每一行对应一个表达式的值。
    样例输入
    3
    add(1,2) 
    max(1,999) 
    add(min(1,1000),add(100,99)) 
    
    样例输出
    3
    999
    200

     
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stack>
    
    using namespace std;
    stack <int> s;
    
    double add(int m, int n)
    {
    return m + n;
    }
    double max(int m, int n)
    {
    return m >= n ? m : n; 
    } 
    double min(int m, int n)
    {
    return m >= n ? n : m;
    }
    void reverse(char a[])
    {
    char b[400];
    int i;
    memset(b, '', sizeof(b));
    strcpy(b, a);
    
    for(i = 0; i < strlen(a); i++) 
    a[i] = b[strlen(b)-i-1];
    } 
    int main()
    
    {
    int n, i, j = 0,K;
    int p, q;
    char str[400],a[400], b[400];
    
    
    scanf("%d", &n);
    getchar();
    
    while (n--) {
    gets(str);
    memset(a, '', sizeof(a));
    if(str[strlen(str) - 1] != ')') { 
    printf("%s
    ", str);
    continue;
    }
    for(i = strlen(str) - 1; i >= 3; i--) {    
    if(str[i] == ')') continue;
    if(str[i] !=',' && str[i] != '(') a[j++] = str[i];
    if(str[i-1] == ',' || str[i-1] == '(') {
    reverse(a);
    q = atof(a);
    j = 0;
    memset(a, '', sizeof(a));
    s.push(q);
    }
    if(str[i] == '(') {
    p = s.top();    s.pop();
    q = s.top();    s.pop();
    switch(str[i-1]) {
    case 'd': s.push(add(p, q)); i = i - 3; continue;
    case 'n': s.push(min(p, q)); i = i - 3; continue;
    case 'x': s.push(max(p, q)); i = i - 3; continue;
    }
    }
    }
    printf("%d
    ", s.top());
    }
    return 0;
    }        
  • 相关阅读:
    ANR----以及如何定位是前端问题还是后台问题?
    一个App或者web端,你怎么展开测试
    创业性公司,你以什么方式来进行对真机的成本降低 ?
    判断查找IP的两种方法
    接口测试(四)总结及小技巧笔记
    接口测试 (三)功能分类及配置文件引入
    接口测试(二) 优化项目分层及cookies值带入
    接口测试模块完整版
    接口测试入门
    unittest框架(惨不忍睹低配版)
  • 原文地址:https://www.cnblogs.com/imwtr/p/4069573.html
Copyright © 2011-2022 走看看