0
已解决
李承耀
新手光能
新手光能
#include<bits/stdc++.h>
#include<windows.h>
#define clear_cin() fflush(stdin)
using namespace std;
string s[100005],ans[100005];
int n;
void clear(){
system("cls");
clear_cin();
}
void ert(){
MessageBeep(MB_ICONERROR);
}
string calc(string s){
long double num[100005];
char c[100005];
int pos=1;
stringstream sstream;
sstream<<s;
sstream>>num[1];
while(sstream>>c[pos]>>num[pos+1])pos++;
for(int i=1;i<=pos;i++){
if(c[i]=='\0')break;
if(c[i]=='*'||c[i]=='/'||c[i]=='%'){
if(c[i]=='*'){
num[i]*=num[i+1];
}
if(c[i]=='/'){
if(num[i+1]==0)return "NAN";
num[i]/=num[i+1];
}
if(c[i]=='%'){
if(num[i+1]==0)return "NAN";
num[i]=fmod(num[i],num[i+1]);
}
c[i]=c[i+1];
for(int j=i+1;j<=pos;j++){
c[j]=c[j+1];
num[j]=num[j+1];
}
}
}
long double ans=num[1];
for(int i=2;i<=pos;i++){
if(c[i-1]=='\0')break;
if(c[i-1]=='+'||c[i-1]=='-'){
if(c[i-1]=='+'){
ans+=num[i];
}
if(c[i-1]=='-'){
ans-=num[i];
}
}
else if(c[i-1]!='*'&&c[i-1]!='/'&&c[i-1]!='%')return "NAN";
}
string retd;
stringstream anss;
anss<<ans;
anss>>retd;
return retd;
}
int main(){
system("title 小小计算器1.1 Build 1031 本作品为LOS开发团队原创,盗版必究!");
while(1){
clear();
cout<<"1.输入新算式\n2.查看历史记录\n3.清空历史记录\n4.版本号\n5.退出\n";
string t;
getline(cin,t);
clear();
if(t=="1"||t=="1.输入新算式"||t=="输入新算式"){
cout<<"请输入算式(支持小数,+-*/%,不支持括号)";
getline(cin,s[++n]);
clear();
ans[n]=calc(s[n]);
if(ans[n]=="NAN"){
n--;
cout<<"输入错误";
ert();
}
else{
cout<<s[n]<<"="<<ans[n]<<endl<<"按Enter继续";
}
getchar();
}
else if(t=="2"||t=="查看历史记录"||t=="2.查看历史纪录"){
for(int i=1;i<=n;i++){
cout<<s[i]<<'='<<ans[i]<<endl;
}
cout<<"按Enter继续";
getchar();
}
else if(t=="3"||t=="清空历史记录"||t=="3.清空历史记录"){
n=0;
cout<<"已清空!按Enter继续";
getchar();
}
else if(t=="4"||t=="版本号"||t=="4.版本号"){
cout<<"小小计算器1.1 Build 1031\n编译日期2022/12/28\n本作品为LOS开发团队原创,盗版必究!\n按Enter继续";
getchar();
}
else if(t=="5"||t=="5.退出"||t=="退出")break;
}
return 0;
}