问题标题: 小小计算器1.2正式发布(Bug已经修复)

0
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]={0.0l};
	char c[100005]={'\0'};
	int pos=1;
	stringstream sstream;
	sstream<<s;
	sstream>>num[1];
	while(sstream>>c[pos]>>num[pos+1])pos++;
	for(int i=1;i<=pos;){
		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]); 
			}
			for(int j=i;j<pos;j++)c[j]=c[j+1];
			for(int j=i+1;j<pos;j++)num[j]=num[j+1]; 
			pos--; 
		}
		else i++;
	}
	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(){
	SetConsoleTitle("小小计算器1.2 Build 1100  本作品为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.2 Build 1100\n开发日期2022/12/28\n本作品为LOS开发团队原创,盗版必究!\n按Enter继续";
			getchar();
		}
		else if(t=="5"||t=="5.退出"||t=="退出")break;
	}
	return 0;
}

 

李承耀在2022-12-28 13:00:52追加了内容

1


0
已采纳
沙宸安
沙宸安
高级启示者
高级启示者

既然模运算又有了,那整除不也得安排一下

推荐使用Visual Basic语言的反斜杠(\)

0
沙宸安
沙宸安
高级启示者
高级启示者

那个百分号究竟是怎么用的,我不太清楚

我要回答