⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1059.cpp

📁 Description Calculate a+b Input Two integer a,b (0<=a,b<=101000) Output Outpu
💻 CPP
字号:
#include<stdio.h>
#include<iostream>
#include<string>
#include<malloc.h>
using namespace std;
int  a[200];
char b[200];
int topa;
int topb; 
int tops;
int symbol_rank(char p1)
{
    if(p1=='(')
      return 4;
    else if(p1=='+'||p1=='-')
      return 2;
    else if(p1=='*'||p1=='/')
      return 3;
    else if(p1==')') 
      return 1;
    else if(p1=='#')
      return 0;
    else {
  //    printf("符号不合法!!!\n");
      return -1;
    }
}
int Precede(char p1,char p2)
{
   if((p1=='('&&p2==')')||(p1=='#')&&(p2=='#'))
        return 0;
   if((p1==')'&&p2=='(')||(p1=='#'&&p2==')')||(p1=='('&&p2=='#')){
        printf("表达式输入错误!!!");
        return -2;
   }
   if(p1=='(')
	   return -1;
   if(p1==')')
	   return 4;
   int a=symbol_rank(p1),b=symbol_rank(p2);
   if(a>=b)
        return 1;
   else 
        return -1;
}
int Operate(int p1,char theta,int p2)//flag用来检查除数是否为0 
{                                 
    switch(theta){
        case '+':return p1+p2;break;
        case '-':return p1-p2;break;
        case '*':return p1*p2;break;
        case '/':if(p2!=0)  return p1/p2;
             //     else {printf("你输入了表达式中可能出现了除数为0的项,请认真检查!!!\n\n");
             //         flag=1;  return 1;}
			//	  break;
      //   default:  printf("********符号输入错误*********");
	}
}
int main()
{
    string s;
  //  freopen("1059.txt","r",stdin);
    cin >> s;
    s[s.size()]='#';
    topa=0;
    topb=0;
    tops=0;
    b[topb++]='#';
    char c=s[tops++];
    while(c!='#'||b[topb-1]!='#'){
            if('0'<=c&&c<='9'){
                a[topa++]=c-'0';
                c=s[tops++];
            }               
            else{
                 if(Precede(b[topb-1],c)==-1){
                           b[topb++]=c;
                           c=s[tops++];                
                 }
                 else if(Precede(b[topb-1],c)==0){
                           topb--;
                           c=s[tops++];
                 }
                 else{
                           int   e=a[--topa];
                           int   d=a[--topa];
                           char  o=b[--topb];
                           a[topa++]=Operate(d,o,e);
                 }
            }         
    }
    cout << a[0] << endl;
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -