用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
zhaowanru19的公告
文章分类
    存档

    原创  24点算法 收藏

    /* first函数给出各个运算符的优先级,其中=为表达式结束符 */
    int first(char c)
    { int p;
    switch(c)
    { case ‘*‘: p=2; break;
    case ‘/‘: p=2; break;
    case ‘+‘: p=1; break;
    case ‘-‘: p=1; break;
    case ‘(‘: p=0; break;
    case ‘=‘: p=-1; break;
    }
    return(p);
    }
    /* 此函数实现中缀到后缀的转换 */
    /* M的值宏定义为20 */
    /* sp[]为表达式数组 */
    int mid_last()
    { int i=0,j=0; char c,sm[M];
    c=s[0]; sm[0]=‘=‘; top=0;
    while(c!=‘\0‘)
    { if(islower(c)) sp[j++]=c;
    else switch(c)
    { case ‘+‘:
    case ‘-‘:
    case ‘*‘:
    case ‘/‘: while(first(c)<=first(sm[top]))
    sp[j++]=sm[top--];
    sm[++top]=c; break;
    case ‘(‘: sm[++top]=c; break;
    case ‘)‘: while(sm[top]!=‘(‘)
    sp[j++]=sm[top--];
    top--; break;
    default :return(1);
    }
    c=s[++i];
    }
    while(top>0) sp[j++]=sm[top--];
    sp[j]=‘\0‘; return(0);
    }
    /* 由后缀表达式来计算表达式的值 */
    int calc()
    { int i=0,sm[M],tr; char c;
    c=sp[0]; top=-1;
    while(c!=‘\0‘)
    { if(islower(c)) sm[++top]=ver[c-‘a‘];/*在转换过程中用abcd等来代替数,
    这样才可以更方便的处理非一位数,
    ver数组中存放着这些字母所代替的数*/
    else switch(c)
    { case ‘+‘: tr=sm[top--]; sm[top]+=tr; break;
    case ‘-‘: tr=sm[top--]; sm[top]-=tr; break;
    case ‘*‘: tr=sm[top--]; sm[top]*=tr; break;
    case ‘/‘: tr=sm[top--];sm[top]/=tr;break;
    default : return(1);
    }
    c=sp[++i];
    }
    if(top>0) return(1);
    else { result=sm[top]; return(0); }
    }


     

    发表于 @ 2006年11月26日 13:45:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:大家帮忙找一个实习单位!无分可散!不好意思!

    • 发表评论
    • 评论内容:
    •  
    Copyright © zhaowanru19
    Powered by CSDN Blog