#include<iostream>
using namespace std;
int Elementary_operations(double a[20],char operat[20],int num){
for(int j=0;j<num;j++){
if(operat[j]==47){
a[j]=a[j]/a[j+1];
a[j+1]=1;
}
if(operat[j]==42){
a[j]=a[j]*a[j+1];
a[j+1]=1;
} //先将乘除号计算,将结果赋给前边的数 ,并用b来标记乘除号。并且如果是连着乘除,就将后边的数字赋值为1 如5+5*6转化为5+30*1
}
return 0;
}
double Final_operation(double a[20],char operat[20],int num){
double Provisional_result;
if(operat[0]==42){
Provisional_result=a[0]*a[1];
}
if(operat[0]==43){
Provisional_result=a[0]+a[1];
}
if(operat[0]==45){
Provisional_result=a[0]-a[1];
}
if(operat[0]==47){
Provisional_result=a[0]/a[1];
}
//先得到一个临时结果
for(int i=2;i<num;i++){
if(operat[i]==42){
Provisional_result=Provisional_result*a[i];
}
if(operat[i]==43){
Provisional_result=Provisional_result+a[i];
}
if(operat[i]==45){
Provisional_result=Provisional_result-a[i];
}
if(operat[i]==47){
Provisional_result=Provisional_result/a[i];
}
}
return Provisional_result;
}
int main(){
int num;
double a[20],Provisional_results;
char operat[20];
for(int i=0;operat[i]!='\n';i++){
cin>>a[i];
num=i+1;
cin.get(operat[i]);
if(operat[i]=='\n')
break;
} //输入数据至敲回车
Elementary_operations(a,operat,num); //先进行一遍
for(int j=0;j<num;j++){
for(int i=0;i<num;i++){
if((operat[i]==42||operat[i]==47)&&a[i+1]!=1)
Elementary_operations(a,operat,num);
}
} //确保所有连着乘除的除了第一个数字其他的都是1
// for(int i=0;i<num;i++)
// cout<<a[i]<<operat[i];
// cout<<endl;
// Provisional_results=Final_operation(a,operat,num);
// cout<<num<<endl;
cout<<Provisional_results;
return 0;
}
这部分代码可以实现部分情况的混合运算,但仍有部分情况,由于代码的限制性,无法得到正确结果,且最多只能进行20项数字的连续运算
一是不能在除号后边紧接着乘号如5+5*6/6*5,应该得到30,但实际结果与5+30/30=6相同。
二是不能计算部分目前尚未找到特征的计算式子,如2+5*6-3,应得到29,但却得到了31,某些也是如此般错误,尚未找到特征。