F : 模拟计算器
Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 107 Solved: 24
Description
给出n个数,和n - 1个运算符(只含有加减乘号,不含除号,按顺序填入n个数之间),要求输出该式的答案。
Input
单组数据。
第一行为n(2 ≤ n ≤ 100),且n为整数。
第二行为n个数,每个数a保证1 ≤ a ≤ 10,且为整数。
第三行为n - 1个运算符,运算符之间由空格隔开。
数据保证每一步运算结果不会超过 1018
Output
如题。
Sample Input
4 1 2 3 4
+* -Sample Output
3
Hint
1 + 2 * 3 - 4 = 3
一、题目大意
设计一程序,具备加减乘的功能
二、思路
加减乘,里面有一个优先级的问题。由于加减乘都是二元运算符,所以要添加优先级的规则进去,最少需要三个数即可,构建这种优先级规则。
首先,初始化两个数字为p1,p2和运算符type。之后每次弹出一个运算符一个数字,与开头的p1,p2进行运算不断循环至结束。最后在针对p1,p2,与运算符type计算即可
#include<iostream>
using namespace std;
long long nums[111];
char arr[111];
int main()
{
//1、输入部分
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>nums[i];//保存数字
for(int i=1;i<n;i++)cin>>arr[i];//保存运算
//2、处理部分
long long p1=nums[0],p2=nums[1];//获取开头的两个数
char type=arr[1]; //获取开头的字符
for(int i=2;i<n;i++)
{
char curType=arr[i];//循环每次获取一个字符一个数字,这样同时间就有三个数字,两个加减乘字符
long long curNum=nums[i];
if(curType!='*')//如果这个字符不是乘法,那么就不必优先运算,将p1与p2运算并保存在p1里面,p2=新的数字,type=新的字符
{
if(type=='+') p1+=p2;
else if(type=='-')p1-=p2;
else p1*=p2;
p2=curNum;
type=curType;
}
else p2*=curNum;//否则先运算后面出现的两个数字
}
if(type=='-')cout<<p1-p2<<endl;
else if(type=='+')cout<<p1+p2<<endl;
else cout<<p1*p2<<endl;
return 0;
}