zoukankan      html  css  js  c++  java
  • 计算器

      1 #include<cstdio>
      2 #include<cstdlib>
      3 #include<cstring>
      4 #include<vector>
      5 using namespace std;
      6 char a[105];
      7 struct Node{
      8     Node *lson;
      9     Node *rson;
     10     char data[105];
     11     bool brackets = 0;
     12 };
     13 char b[105];
     14 int num;
     15 bool sign = 1;
     16 vector<char>sy[6];
     17 Node *Structure(){
     18     Node *head, *p_node, *q_node, *d_node;
     19     while(a[num] != ''){
     20         if(a[num] == ')'){
     21             num++;
     22             return head;
     23         }
     24         if(a[num] == '('){
     25             int tmp = num++;
     26             sign = 1;
     27             if(tmp){
     28                 d_node -> rson = Structure();
     29                 d_node -> rson -> brackets = 1;
     30             }
     31             else {
     32                 p_node = Structure();
     33                 sign = 1;
     34             }
     35         }
     36         int cnt = 0;
     37         while(a[num] >= '0' && a[num] <= '9' || a[num] == '.'){
     38             b[cnt++] = a[num++];
     39         }
     40         if(cnt){
     41             b[cnt] = '';
     42             p_node = (Node*)malloc(sizeof(Node));
     43             strcpy(p_node -> data, b); p_node -> lson = NULL; p_node -> rson = NULL;
     44             if(!sign){
     45                 d_node -> rson = p_node;
     46             }
     47         }
     48         else {
     49             b[cnt++] = a[num++];b[cnt] = '';
     50             if(sign){
     51                 d_node = head = (Node*)malloc(sizeof(Node));
     52                 strcpy(head -> data, b); head -> lson = p_node;
     53                 sign = 0;
     54             }
     55             else {
     56                 q_node = head;
     57                 d_node = (Node*)malloc(sizeof(Node));
     58                 strcpy(d_node -> data, b);
     59                 while(1){
     60                     bool flag = 0;
     61                     for(int i = 0; i < sy[q_node -> data[0]].size(); i++){
     62                         if(sy[q_node -> data[0]][i] == b[0]){
     63                             flag = 1;
     64                             break;
     65                         }
     66                     }
     67                     if(flag){
     68                         d_node -> lson = q_node;
     69                         if(q_node == head){
     70                             head = d_node;
     71                         }
     72                         else {
     73                             p_node -> rson = d_node;
     74                         }
     75                         break;
     76                     }
     77                     else {
     78                         if(q_node -> rson -> rson && !q_node -> rson -> brackets){
     79                             p_node = q_node;
     80                             q_node = q_node -> rson;
     81                         }
     82                         else{
     83                             d_node -> lson = q_node -> rson;
     84                             q_node -> rson = d_node;
     85                             break;
     86                         }
     87                     }
     88                 }
     89             }
     90         }
     91     }
     92     return head;
     93 }
     94 void Preorder_traversal(Node *p_node){
     95     if(p_node){
     96         printf("%s", p_node -> data);
     97         Preorder_traversal(p_node -> lson);
     98         Preorder_traversal(p_node -> rson);
     99     }
    100 }
    101 void Inorder_traversal(Node *p_node){
    102     if(p_node){
    103         Inorder_traversal(p_node -> lson);
    104         printf("%s", p_node -> data);
    105         Inorder_traversal(p_node -> rson);
    106     }
    107 }
    108 void Postorder_traversal(Node *p_node){
    109     if(p_node){
    110         Postorder_traversal(p_node -> lson);
    111         Postorder_traversal(p_node -> rson);
    112         printf("%s", p_node -> data);
    113     }
    114 }
    115 double Number(char ch[105]){
    116     return atof(ch);
    117 }
    118 char *Charater_string(double x){
    119     char ch[105];
    120     sprintf(ch, "%f", x);
    121     return ch;
    122 }
    123 char *Count(Node *p_node){
    124     if(p_node -> lson -> lson){
    125         Count(p_node -> lson);
    126     }
    127     if(p_node -> rson -> rson){
    128         Count(p_node -> rson);
    129     }
    130     if(p_node -> lson -> lson == NULL && p_node -> rson -> rson == NULL){
    131         double x = Number(p_node -> lson -> data);
    132         double y = Number(p_node -> rson -> data);
    133         delete(p_node -> lson -> lson);
    134         delete(p_node -> lson -> rson);
    135         delete(p_node -> rson -> lson);
    136         delete(p_node -> lson -> rson);
    137         p_node -> lson = NULL;
    138         p_node -> rson = NULL;
    139         switch(p_node -> data[0]){
    140             case '+': strcpy(p_node -> data, Charater_string(x+y));break;
    141             case '-': strcpy(p_node -> data, Charater_string(x-y));break;
    142             case '*': strcpy(p_node -> data, Charater_string(x*y));break;
    143             case '/': strcpy(p_node -> data, Charater_string(x/y));break;
    144         }
    145     }
    146     return p_node -> data;
    147 }
    148 int main(){
    149     while(~scanf("%s", a)){
    150         sy['-'].push_back('+');
    151         sy['-'].push_back('-');
    152         sy['*'].push_back('+');
    153         sy['*'].push_back('-');
    154         sy['/'].push_back('+');
    155         sy['/'].push_back('-');
    156         sy['/'].push_back('*');
    157         sy['/'].push_back('/');
    158         num = 0;
    159         sign = 1;
    160         Node *head = Structure();
    161         puts("Preorder traversal:");
    162         Preorder_traversal(head);
    163         puts("");
    164         puts("Inorder traversal:");
    165         Inorder_traversal(head);
    166         puts("");
    167         puts("Postorder traversal:");
    168         Postorder_traversal(head);
    169         puts("");
    170         puts("Computed result is ");
    171         printf("%s
    ", Count(head));
    172     }
    173     return 0;
    174 }
  • 相关阅读:
    Springcloud学习笔记32--JeecgBoot 注解扫描范围问题(bean扫描不到的问题)
    Springcloud学习笔记31--JeecgBoot 代码生成器一键生成代码(包括:controller、service、dao、mapper、entity、vue)
    Springcloud学习笔记30--JeecgBoot xxl-job定时任务集成和Redisson分布式锁集成
    Springcloud学习笔记29--JeecgBoot 微服务性能测试Jmeter使用
    Springcloud学习笔记28--JeecgBoot 微服务熔断/限流
    Springcloud学习笔记27--JeecgBoot 微服务feign接口调用
    Springcloud学习笔记26--JeecgBoot 新建一个微服务模块,同时配置动态数据源(使用两个数据库)
    Springcloud学习笔记25--JeecgBoot 启动jeecg-demo服务(升级某个模块为微服务模块)
    Springcloud学习笔记24--JeecgBoot 以微服务的方式启动jeecg-system
    Springcloud学习笔记23--application.yml文件的各个配置项及其含义
  • 原文地址:https://www.cnblogs.com/ACMessi/p/4935261.html
Copyright © 2011-2022 走看看