• wenbao与模拟表达式计算


    http://lx.lanqiao.cn/problem.page?gpid=T419

    水水水,也就写了两三个小时

     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 char str[109], b[109];
     5 int a[109], sum = 0, aa = 0, bb = 0, x, y;
     6 void xx(){ //处理乘除
     7     while(bb && (b[bb-1] == '*' || b[bb-1] == '/')){
     8         if(b[bb-1] == '*') a[aa-2] = a[aa-2]*a[aa-1];
     9         else a[aa-2] = a[aa-2]/a[aa-1];
    10         aa--, bb--;
    11     }
    12 }
    13 int main(){
    14     scanf("%s", str);
    15     int len = strlen(str);
    16     bool flag = false;
    17     for(int i = 0; i <= len; ++i){
    18         if(i == len){
    19             if(flag) a[aa++] = sum, xx();
    20             break;
    21         }
    22         if(str[i] >= '0' && str[i] <= '9'){
    23             flag = true, sum = sum*10+str[i]-'0';
    24         }else{
    25             if(flag) a[aa++] = sum, xx(), sum = 0;
    26             if(str[i] == ')'){ //处理括号
    27                 int j;
    28                 for(j = 1; ; ++j) if(b[bb-j] == '(') break;
    29                 for(int k = bb-j+1, t = 1; k < bb; ++k, ++t){
    30                     if(b[k] == '+') a[aa-j] += a[aa-j+t];
    31                     else a[aa-j] -= a[aa-j+t];
    32                 }
    33                 aa = aa-j+1, bb = bb-j, xx();
    34             }else{
    35                 b[bb++] = str[i];
    36             }
    37             flag = false;
    38         }
    39     }
    40     for(int i = 0, k = 1; i < bb; ++i, k++){
    41         if(b[i] == '+') a[0] += a[k];
    42         else a[0] -= a[k];
    43     }
    44     printf("%d
    ", a[0]);
    45     return 0;
    46 }

     ————————————————————————————————————————————————————————————————————————————————————————————————————————

    类似的,只不过是求浮点数的,稍微改一改就过了,,,水水水

    http://acm.nyist.net/JudgeOnline/problem.php?pid=35

     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 using namespace std;
     5 char str[1009], b[1009];
     6 double a[1009], sum;
     7 int aa, bb, num;
     8 void xx(){ //处理乘除
     9     while(bb && (b[bb-1] == '*' || b[bb-1] == '/')){
    10         if(b[bb-1] == '*') a[aa-2] = a[aa-2]*1.0*a[aa-1];
    11         else a[aa-2] = a[aa-2]*1.0/a[aa-1];
    12         aa--, bb--;
    13     }
    14 }
    15 int main(){
    16     int t;
    17     scanf("%d", &t);
    18     while(t--){
    19         aa = bb = num = 0;
    20         sum = 0;
    21         scanf("%s", str);
    22         int len = strlen(str);
    23         bool flag = false, flag2 = false;
    24         for(int i = 0; i < len; ++i){
    25             if(i == len-1){
    26                 if(flag) a[aa++] = sum, xx();
    27                 break;
    28             }
    29             if(str[i] == '*' || str[i] == '/' || str[i] == '+' || str[i] == '-' || str[i] == '(' || str[i] == ')'){
    30                 if(flag) a[aa++] = sum, xx(), sum = 0, num = 0;
    31                 if(str[i] == ')'){ //处理括号
    32                     int j;
    33                     for(j = 1; ; ++j) if(b[bb-j] == '(') break;
    34                     for(int k = bb-j+1, t = 1; k < bb; ++k, ++t){
    35                         if(b[k] == '+') a[aa-j] += a[aa-j+t];
    36                         else a[aa-j] -= a[aa-j+t];
    37                     }
    38                     aa = aa-j+1, bb = bb-j, xx();
    39                 }else{
    40                     b[bb++] = str[i];
    41                 }
    42                 flag2 = flag = false;
    43             }else{
    44                 flag = true;
    45                 if(str[i] == '.'){
    46                     flag2 = true; continue;
    47                 }
    48                 if(flag2){
    49                     double x = (str[i]-'0')*1.0;
    50                     num++;
    51                     int num2 = num;
    52                     while(num2--){
    53                         x/=10.0;
    54                     }
    55                     sum += x;
    56                 }else{
    57                     sum = sum*10.0+(str[i]-'0')*1.0;
    58                 }
    59             }
    60         }
    61         for(int i = 0, k = 1; i < bb; ++i, k++){
    62             if(b[i] == '+') a[0] += a[k];
    63             else a[0] -= a[k];
    64         }
    65         printf("%.2lf
    ", a[0]);
    66     }
    67     return 0;
    68 }

    只有不断学习才能进步!

  • 相关阅读:
    弹性盒模型
    CSS3属性
    CSS3选择器
    闭包
    angularjs-select2的使用
    angular 分页插件的使用
    webstorm 破解
    数组和字符串之间的转化
    git 拉取分支代码 合分支
    时间戳转化为时间格式 时间格式转为时间戳
  • 原文地址:https://www.cnblogs.com/wenbao/p/6596267.html
Copyright © 2020-2023  润新知