ZOJ 3778 Talented Chef(計算器模擬)

題目鏈接

該題是求三個數之間的加減乘除取餘,其實就是模擬計算器,下面給出用stack容器寫的普遍通用的代碼:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define pii pair<int, int>
using namespace std;
typedef long long ll;
char s[1000];

int main()
{
	int t = 0;
	scanf("%d%*c", &t);
	while(t--)
	{
		stack<char>s1;
		stack<int>s2;
		int a, b;
		char c;
		gets(s);
		for(int i = 0; s[i]; i++)
		{
			if(s[i] >= '0' && s[i] <= '9')  
            {  
                a = 0;  
                while(s[i] >= '0' && s[i] <= '9')  
                {  
                    a = a * 10 + s[i] - '0';  
                    i++;  
                }  
                i--;  
                s2.push(a);  
            } 
			else if(s[i] == '-' || s[i] == '+')  
            {  
                if(!s1.empty())  
                {  
                    c = s1.top();  
                    s1.pop();  
                    a = s2.top();  
                    s2.pop();  
                    b = s2.top();  
                    s2.pop();  
                    if(c=='+')  
                        a += b;  
                    else  
                        a = b-a;  
                    s2.push(a);  
                    s1.push(s[i]);  
                }  
                else  
                    s1.push(s[i]);  
            } 
			else if(s[i] == '/' || s[i] == '*' || s[i] == '%')  
            {  
                char cnt = s[i];  
                b = 0;  
                i += 2;  
                while(s[i] >= '0' && s[i] <= '9')  
                {  
                    b = b * 10 + s[i]-'0';  
                    i++;  
                }  
                i--;  
                a = s2.top();  
                s2.pop();  
                if(cnt == '/')  
                    a = a / b;  
                else if(cnt == '*')  
                    a = a * b;  
                else if(cnt == '%')  
                    a = a % b;  
                s2.push(a);  
            }    
		}
		while(!s1.empty())  
        {  
            c = s1.top();  
            s1.pop();  
            a = s2.top();  
            s2.pop();  
            b = s2.top();  
            s2.pop();  
            if(c == '+')  
                a += b;  
            else  
                a = b - a;  
            s2.push(a);  
        }  
        printf("%d\n", s2.top()); 
	}
	return 0;
}


發佈了102 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章