问题标题: 小小计算器1.1正式发布!

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];
    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;
}

 


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

请问这是什么奇奇怪怪的bug

如果我没记错的话,答案应该是0.001吧

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

如果刚才是小数可以理解的话,这个我就彻底懵了

0
0
刘意阳
刘意阳
初级天翼
初级天翼

不应该等于3000吗?

这相差太大了

我要回答