问题标题: 最新版计算器

0
0
已解决
Kevin
Kevin
中级守护
中级守护

这是计算器3.0,如果有想看1.0,2.0的扣1

催更计算器的扣2

想看恐怖规则怪谈的扣3

#include <iostream>
#include <cstdio>
#include <cstring> 
using namespace std;
string s[1000005];
int main()
{
    cout<<"使用说明:"<<endl<<"1.输入的除数不能为零,否则会显示“除数不能为零,请重新输入”;"<<endl<<"2.输入除“0~9”等数字及“+、-、*、/”等运算符外的字符,会显示“输入不合法,请重新输入”;"<<endl<<"3.除法运算保留至整数位;"<<endl<<"4.需要退出程序时输入“退出”或者直接点击关闭。"<<endl<<endl; 
    while(1)
    {
            cout<<"请输入算式:";        
            string t;
            cin>>t;
            if(t=="退出")
            {
                cout<<"欢迎下次光临!";
                return 0; 
            }
            while(1)
            {
                bool flag=1; 
                for(int i=0;i<t.size();i++)
                {
                    if(t[i]!='+'&&t[i]!='-'&&t[i]!='*'&&t[i]!='/')
                    {
                        if(t[i]<'0'||t[i]>'9')
                        {
                            cout<<"输入不合法,";
                            flag=0;    
                            break;
                        }
                    }
                }
                for(int i=0;i<t.size();i++)
                {
                    if(t[i]=='/'&&t[i+1]=='0')
                    {
                        if(t[i+2]<'0'||t[i+2]>'9')
                        {
                            cout<<"除数不能为零,";
                            flag=0;    
                            break;
                        }
                    } 
                }
                if(flag==0){
                    cout<<"请重新输入:"; 
                    cin>>t;
                    if(t=="退出")
                    {
                        cout<<"欢迎下次光临!";
                        return 0; 
                    }
                }
                else
                {
                    break;
                }
            }
            t+="+0";
        int j=1;
        for(int i=0;i<t.size();i++)
        {
            if(t[i]>='0'&&t[i]<='9'||t[i]=='*'||t[i]=='/')
            {
                s[j]+=t[i];
            }
            else
            {
                s[j]+=t[i];
                j++;
            }
        }
        for(int i=1;i<=j;i++)
        {
            int p1=s[i].find("*",0);
            int p2=s[i].find("/",0);
            if(p1!=-1||p2!=-1)
            {
                int zh=0;
                int dq=0;
                string dt=s[i];
                char d1;
                int pos=0;
                for(int k=0;k<dt.size();k++)
                {
                    if(dt[k]>='0'&&dt[k]<='9')
                    {
                        zh*=10;
                        zh+=int(dt[k]-'0');
                    }
                    else
                    {
                        d1=dt[k];
                        pos=k;
                        break;
                    }
                }
                char dn=d1;
                for(int k=pos+1;k<dt.size();k++)
                {
                    if(dt[k]>='0'&&dt[k]<='9')
                    {
                        dq*=10;
                        dq+=int(dt[k]-'0');
                    }
                    else
                    {
                        if(dn=='*')
                        {
                            zh*=dq;
                        }
                        else if(dn=='/')
                        {
                            int ttt=zh*1.0/dq+0.5;  
                            zh=ttt;
                        }
                        dn=dt[k];
                        dq=0;
                    }
                }
                if(dn=='*')
                {
                    zh*=dq;
                }
                else if(dn=='/')
                {
                    zh/=dq;
                }
                int m=0; 
                string ms="";
                while(zh)
                {
                    ms+=(zh%10+'0');
                    zh/=10;
                }
                s[i]="";
                for(int k=ms.size()-1;k>=0;k--)
                {
                    s[i]+=ms[k];
                }
                if(dt[dt.size()-1]=='+'||dt[dt.size()-1]=='-'||dt[dt.size()-1]=='*'||dt[dt.size()-1]=='/')
                {
                    s[i]+=dt[dt.size()-1];
                }
            }
        }
        t="";
        for(int i=1;i<=j;i++)
        {
            t+=s[i];
        }
        int t1=0,pos=0;
        int sum=0;
        char d1;
        for(int i=0;i<t.size();i++)
        {
            if(t[i]<='9'&&t[i]>='0')
            {
                t1*=10;
                t1+=int(t[i]-'0');
            }
            else
            {
                pos=i;
                d1=t[i];
                break;
            }
        }
        char dn=d1;
        for(int i=pos+1;i<t.size();i++)
        {
            if(t[i]!='+'&&t[i]!='-'&&t[i]!='*'&&t[i]!='/')
            {
                sum*=10;
                sum+=int(t[i]-'0');
            }
            else
            {
                if(dn=='+')
                {
                    t1+=sum;
                }
                else if(dn=='-')
                {
                    t1-=sum;
                }
                dn=t[i];
                sum=0;
            }
        }
        if(dn=='+')
        {
            t1+=sum;
        }
        else if(dn=='-')
        {
            t1-=sum;
        }
        cout<<"结果是:"<<t1;
        for(int i=1;i<=1000000;i++)
        {
            s[i]="";
        }
        cout<<endl;
    }
}


0
已采纳
汪子阳
汪子阳
初级守护
初级守护

沙发()

22222222222222222

0
0
0
我要回答