vs2019,有没有猛男知道啊,重金悬赏5块大洋。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 超级无敌宇宙第一无上至尊金光霹雳计算器___
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class zijixiedezhan
{
private int size = -1;
private double[] sss = new double[1000];
public bool mypush(double x)
{
sss[++size] = x;
return true;
}
public void mypop()
{
size--;
}
public void myclear()
{
size = -1;
}
public double mytop()
{
return sss[size];
}
public bool myempty()
{
if (size == -1)
return true;
else return false;
}
}
zijixiedezhan s = new zijixiedezhan();
double num1, num2;
private void button1_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="";
textDisplay.Text += "0";
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="1";
else
textDisplay.Text += "1";
}
private void button2_Click_1(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="9";
else
textDisplay.Text += "9";
}
private void button4_Click(object sender, EventArgs e)
{
string shizi = textDisplay.Text;//利用中缀转后缀进行计算
double linshizhi = 0;
double jieguo = 0;
double[] houzhui = new double[500];
int ii = 0;
for (int i=0;i<shizi.Length;i++)//中缀转后缀
{
if (shizi[i] > 47 && shizi[i] < 58 || shizi[i] == '.')//判断是否是数字
{
houzhui[ii++] = shizi[i];
if (i == shizi.Length - 1)
houzhui[ii++] = '|';
}
else//是操作符
{
houzhui[ii++] = '|';
if (s.myempty())
{
s.mypush(shizi[i]);
}
else
{
if (shizi[i] == '(')
s.mypush(shizi[i]);
else if (shizi[i] == ')')
{
while (s.mytop() != '(')
{
houzhui[ii] = s.mytop();
ii++;
s.mypop();
}
s.mypop();
}
else if(shizi[i]=='+'||shizi[i]=='-')
{
while (s.mytop()=='+'|| s.mytop() == '-' || s.mytop() == '×' || s.mytop ()== '÷' )
{
houzhui[ii] = s.mytop();
ii++;
s.mypop();
if (s.myempty())
break;
}
s.mypush(shizi[i]);
}
else if (shizi[i] == '×' || shizi[i] == '÷')
{
while ( s.mytop() == '×' || s.mytop() == '÷' )
{
houzhui[ii] = s.mytop();
ii++;
s.mypop();
if (s.myempty())
break;
}
s.mypush(shizi[i]);
}
}
}
}
while(!s.myempty())//将栈里剩余的操作符放入后缀表达式
{
houzhui[ii] = s.mytop();
ii++;
s.mypop();
}
for(int i=0;i<houzhui.Length;i++)//后缀表达式计算求值
{
if (houzhui[i] > 47 && houzhui[i] < 58)//判断是否是数字
{
linshizhi = linshizhi * 10 + houzhui[i] - 48;
}
else if (houzhui[i] == '.')
{
double point = 10;
i++;
while (houzhui[i] > 47 && houzhui[i] < 58)
{
linshizhi += (houzhui[i] - 48) / point;
point *= 10;
i++;
}
i--;
}
else if (houzhui[i] == '|')
{
s.mypush(linshizhi);
linshizhi = 0;
}
else
{
num2 = s.mytop();
s.mypop();
num1 = s.mytop();
s.mypop();
if (houzhui[i] == '×')
{
jieguo = num1 * num2;
s.mypush(jieguo);
}
else if (houzhui[i] == '÷')
{
jieguo = num1 / num2;
s.mypush(jieguo);
}
else if (houzhui[i] == '+')
{
jieguo = num1 + num2;
s.mypush(jieguo);
}
else if (houzhui[i] == '-')
{
jieguo = num1 - num2;
s.mypush(jieguo);
}
}
}
jieguo = s.mytop();
s.myclear();
textDisplay.Text = jieguo.ToString();
}
private void b2_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="2";
else
textDisplay.Text += "2";
}
private void b3_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="3";
else
textDisplay.Text += "3";
}
private void b4_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="4";
else
textDisplay.Text += "4";
}
private void b5_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="5";
else
textDisplay.Text += "5";
}
private void dian_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textDisplay.Text))
textDisplay.Text += "0.0";
else if(!textDisplay.Text.Contains("."))
textDisplay.Text += ".";
}
private void jia_Click(object sender, EventArgs e)
{
textDisplay.Text += "+";
}
private void jian_Click(object sender, EventArgs e)
{
textDisplay.Text += "-";
}
private void cheng_Click(object sender, EventArgs e)
{
textDisplay.Text += "×";
}
private void chu_Click(object sender, EventArgs e)
{
textDisplay.Text += "÷";
}
private void tui_Click(object sender, EventArgs e)
{
try
{
textDisplay.Text = textDisplay.Text.Substring(0, textDisplay.Text.Length - 1);
}
catch(Exception)
{
MessageBox.Show("笨蛋,已经空了,退不了了啊", "重大错误", MessageBoxButtons.OK);
}
}
private void qing_Click(object sender, EventArgs e)
{
textDisplay.Text = "";
s.myclear();
}
private void zuokuohao_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="(";
else
textDisplay.Text += "(";
}
private void youkuohao_Click(object sender, EventArgs e)
{
textDisplay.Text += ")";
}
private void b6_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="6";
else
textDisplay.Text += "6";
}
private void b7_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="7";
else
textDisplay.Text += "7";
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void b8_Click(object sender, EventArgs e)
{
if (textDisplay.Text == "0")
textDisplay.Text ="8";
else
textDisplay.Text += "8";
}
}
}