早教吧 育儿知识 作业答案 考试题库 百科 知识分享

用c#控制台写多项式四则运算!例如实现:33-4+3333333*444/333+33..这样的运算!

题目详情
用c#控制台写多项式四则运算!
例如实现:33-4+3333333*444/333+33..这样的运算!
▼优质解答
答案和解析
///
/// 分解字符串中括号左、中、右部分
///
/// 所要分析的字符串
/// 输出左边
/// 输出中间
/// 输出右边
private static void Bracket(string AText,
out string ALStr, out string ACStr, out string ARStr)
{
int L = 0, R = 0; // 出现的括号,判断匹配用
ALStr = ACStr = ARStr = "";
for (int i = 0; i < AText.Length; i++)
{
if (AText[i] == '(') L++;
else if (AText[i] == ')') R++;
if (L == 0) ALStr += AText[i];
else if (L > R) ACStr += AText[i];
else
{
ARStr = AText.Substring(i + 1);
break;
}
}
if (ACStr.Length >= 1) ACStr = ACStr.Remove(0, 1);
}
private static string fCalc(string AText)
{
if (AText.IndexOf('(') >= 0)
{
string L, C, R;
Bracket(AText, out L, out C, out R);
return fCalc(L + fCalc(C) + R);
}
else if ((AText.IndexOf('+') >= 0) || (AText.IndexOf('-') >= 0))
{
int i = AText.IndexOf('+');
int j = AText.IndexOf('-');
if (i < 0) i = AText.Length - 1;
if (j < 0) j = AText.Length - 1;
int K = Math.Min(i, j);
string L = AText.Substring(0, K);
string R = AText.Substring(K + 1);
if (L.Length = 0))
{
int i = AText.IndexOf('*');
int j = AText.IndexOf('/');
if (i < 0) i = AText.Length - 1;
if (j < 0) j = AText.Length - 1;
int K = Math.Min(i, j);
string L = AText.Substring(0, K);
string R = AText.Substring(K + 1);
if (L.Length 0) && ("*/".IndexOf(AText[i - 1]) >= 0)))
vText += "_";
else if (((i > 0) && ("+-".IndexOf(AText[i - 1]) >= 0)) ||
((i + 1 < L) && ("+-()".IndexOf(AText[i + 1]) < 0)))
vText += "+_";
else vText += AText[i];
}
else vText += AText[i];
}
#endregion 处理负号
return fCalc(vText);
}