利用四则运算中的算法技巧--遇到( 就开始递归,遇到)结束

将一个括号内的所有计算好的的矩阵(包括该括号内部括号的返回矩阵)首先保存下来,然后统一计算,并将运算后矩阵的长宽返回给上一级

#include<stdio.h>
#include<string.h>

int n;
void compute(char s[],int arr_size[][2],int len,int size_r[]);
int multi_num;

int main(){
    int n;
    int arr_size[20][2];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d %d",&arr_size[i][0],&arr_size[i][1]);
    }
    
    int size_r[2];
    char s[200] = {0};
    scanf("%s",s);
    int len = strlen(s);
    
    n = 0;
    multi_num = 0;
    compute(s,arr_size,len,size_r);
    printf("%d\n",multi_num);
     
}

void compute(char s[],int arr_size[][2],int len,int size_r[]){
    // 将属于一个括号的矩阵先保存下来,之后统一计算
    int size[26][2];
    int i = 0;
    
    while(n<len){
        if(s[n]=='('){
            n++;
            compute(s,arr_size,len,size_r);
            size[i][0] = size_r[0];
            size[i][1] = size_r[1];
            i++;
        }
        else if(s[n]==')'){
            n++;
            break;
        }
        else{
            size[i][0] = arr_size[s[n]-'A'][0];
            size[i][1] = arr_size[s[n]-'A'][1];
            n++;
            i++;
        }
        
    }
    for(int j=0;j<i-1;j++){
        multi_num = multi_num + size[j][0]*size[j][1]*size[j+1][1];
        size[j+1][0] = size[j][0];
    }
    size_r[0] = size[0][0];
    size_r[1] = size[i-1][1];
}