想不出来就采用枚举法吧,代码写起来还是很简单的,当然代码写的不怎么样,也不考虑设计效率等等问题了,理论上这种类型的都可以这么拼出来,比较初级的做法,但轻松解决问题。注意Calculate(string expression) 虽然可以作为通用的string转数学算式计算出结果,但是:
1、不支持sin、cos等数学函数
2、不支持[]、{}等括号和除数字、+、-、*、/以外的字符,建议调用计算函数前进行输入的验证。
代码无需多解释,毫无难度。
代码如下(C# winform程序,一个窗体上放个button和memo):

using System;

using System.CodeDom.Compiler;

using System.Reflection;

using System.Text;

using System.Windows.Forms;

using Microsoft.CSharp;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void simpleButton1_Click(object sender, EventArgs e)

{

int icnt = 0;

string[] ss = new string[100];

for (int i = 0; i < 4; i++)

{

string s = "5";

LinkString(i, ref s);

for (int j = 0; j < 4; j++)

{

string s2 = s;

LinkString(j, ref s2);

for (int m = 0; m < 4; m++)

{

string s3 = s2;

LinkString(m, ref s3);

ss[icnt] = s3 + " = " + Calculate(s3).ToString();

icnt++;

}

}

}

memoEdit1.Lines = ss;

}

private void LinkString(int i, ref string s)

{

if (i == 0)

s = s + " + 5";

else

if (i == 1)

s = s + " - 5";

else

if (i == 2)

s = s + " * 5";

else

s = s + " / 5";

}

/// <summary>

/// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法

/// </summary>

/// <param name="expression"></param>

/// <returns></returns>

public static object Calculate(string expression)

{

string className = "Calc";

string methodName = "Run";

expression = expression.Replace("/", "*1.0/");

// 创建编译器实例。

ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());

// 设置编译参数。

CompilerParameters paras = new CompilerParameters();

paras.GenerateExecutable = false;

paras.GenerateInMemory = true;

// 创建动态代码。

StringBuilder classSource = new StringBuilder();

classSource.Append("public class " + className + "\n");

classSource.Append("{\n");

classSource.Append(" public object " + methodName + "()\n");

classSource.Append(" {\n");

classSource.Append(" return " + expression + ";\n");

classSource.Append(" }\n");

classSource.Append("}");

// 编译代码。

CompilerResults result = complier.CompileAssemblyFromSource(paras,classSource.ToString());

// 获取编译后的程序集。

Assembly assembly = result.CompiledAssembly;

// 动态调用方法。

object eval = assembly.CreateInstance(className);

MethodInfo method = eval.GetType().GetMethod(methodName);

object reobj = method.Invoke(eval, null);

GC.Collect();

return reobj;

}

}

}

结果如下:

5 + 5 + 5 + 5 = 20
5 + 5 + 5 - 5 = 10
5 + 5 + 5 * 5 = 35
5 + 5 + 5 / 5 = 11
5 + 5 - 5 + 5 = 10
5 + 5 - 5 - 5 = 0
5 + 5 - 5 * 5 = -15
5 + 5 - 5 / 5 = 9
5 + 5 * 5 + 5 = 35
5 + 5 * 5 - 5 = 25
5 + 5 * 5 * 5 = 130
5 + 5 * 5 / 5 = 10
5 + 5 / 5 + 5 = 11
5 + 5 / 5 - 5 = 1
5 + 5 / 5 * 5 = 10
5 + 5 / 5 / 5 = 5.2
5 - 5 + 5 + 5 = 10
5 - 5 + 5 - 5 = 0
5 - 5 + 5 * 5 = 25
5 - 5 + 5 / 5 = 1
5 - 5 - 5 + 5 = 0
5 - 5 - 5 - 5 = -10
5 - 5 - 5 * 5 = -25
5 - 5 - 5 / 5 = -1
5 - 5 * 5 + 5 = -15
5 - 5 * 5 - 5 = -25
5 - 5 * 5 * 5 = -120
5 - 5 * 5 / 5 = 0
5 - 5 / 5 + 5 = 9
5 - 5 / 5 - 5 = -1
5 - 5 / 5 * 5 = 0
5 - 5 / 5 / 5 = 4.8
5 * 5 + 5 + 5 = 35
5 * 5 + 5 - 5 = 25
5 * 5 + 5 * 5 = 50
5 * 5 + 5 / 5 = 26
5 * 5 - 5 + 5 = 25
5 * 5 - 5 - 5 = 15
5 * 5 - 5 * 5 = 0
5 * 5 - 5 / 5 = 24
5 * 5 * 5 + 5 = 130
5 * 5 * 5 - 5 = 120
5 * 5 * 5 * 5 = 625
5 * 5 * 5 / 5 = 25
5 * 5 / 5 + 5 = 10
5 * 5 / 5 - 5 = 0
5 * 5 / 5 * 5 = 25
5 * 5 / 5 / 5 = 1
5 / 5 + 5 + 5 = 11
5 / 5 + 5 - 5 = 1
5 / 5 + 5 * 5 = 26
5 / 5 + 5 / 5 = 2
5 / 5 - 5 + 5 = 1
5 / 5 - 5 - 5 = -9
5 / 5 - 5 * 5 = -24
5 / 5 - 5 / 5 = 0
5 / 5 * 5 + 5 = 10
5 / 5 * 5 - 5 = 0
5 / 5 * 5 * 5 = 25
5 / 5 * 5 / 5 = 1
5 / 5 / 5 + 5 = 5.2
5 / 5 / 5 - 5 = -4.8
5 / 5 / 5 * 5 = 1
5 / 5 / 5 / 5 = 0.04
 
可以看出图片中后2个算式不可能成立。

c#根据公式进行自动计算 四个5加减乘除=4的更多相关文章

  1. JAVA实现EXCEL公式专题(四)——字符串函数

    直接上代码: /** * 项目名称: * 文件说明: ExCEL公式类型:字符串公式 * 主要特点: * 版本:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package E ...

  2. poj 1348 Computing (四个数的加减乘除四则运算)

    http://poj.org/problem?id=1348 Computing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  3. 在word 2013中输入latex公式

    注意:版权所有,转载请注明出处 向word输入LaTeX公式,插件有很多,前面在使用的是一个叫做Aurora的插件,结果不是免费的,用了一段时间就要收费是,所以就不用了,从网上找到别人的介绍,可以使用 ...

  4. 目标检测(四)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun SPPnet.Fast R-CNN等目标检测算法已经大幅降低了目标检测网络的运行时间. ...

  5. 算法进阶面试题06——实现LFU缓存算法、计算带括号的公式、介绍和实现跳表结构

    接着第四课的内容,主要讲LFU.表达式计算和跳表 第一题 上一题实现了LRU缓存算法,LFU也是一个著名的缓存算法 自行了解之后实现LFU中的set 和 get 要求:两个方法的时间复杂度都为O(1) ...

  6. MathType中公式不对齐怎么办

    MathType是一款专门用来编辑数学公式的数学公式编辑器,利用它可以在文档中快速编辑公式,与文字完美结合,可以编辑出各种各样的数学符号与公式,省下你不少的时间. 一.对齐上标与下标 MathType ...

  7. c/c++优化结构控制

    一.表达式优化--使用替换程序中的乘除法 c/c++中的加减运算效率远远高于乘除运算,由于移位指令的执行速度和乘除法差不多,所以可以使用移位的方式来替换程序中的乘除法.一个数向右移一位,等于该数乘以2 ...

  8. 【转】Matlab练习程序(各向异性扩散)

    http://www.cnblogs.com/tiandsp/archive/2013/04/18/3029468.html 主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留 ...

  9. NPOI之使用EXCEL模板创建报表

    因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了 其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报 ...

随机推荐

  1. 什么是smarty?

    什么是smarty? Smarty是一个使用PHP写出来的模板PHP模板引擎,由PHP.net官方提供 ,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程 序员同美工分离,使用的程序员改 ...

  2. SharePoint 读取 Site Columns 的数据并绑定到DropdownList

    public void GetSiteColumns(DropDownList ddl, String siteColumn) { var fields = new SPSite(ProjectCon ...

  3. mailto: HTML e-mail 链接

    转载: http://www.haorooms.com/post/mailto_link_html 什么是mailto链接? mailto链接是一种html链接,能够设置你电脑中邮件的默认发送信息.但 ...

  4. java设计模式(八) 适配器模式

    [适配器模式]将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 1,Duck接口 package com.pattern.adapter; public inte ...

  5. javaweb学习总结(四十二)——Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  6. JavaScript的DOM操作-非重点部分

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档(HTML文档),对象是指文档中每个元素:模型是指抽象划的东西. 2.Windows对象操作 一.属性和方法 属性(值或者 ...

  7. js 身份验证

    var idCardNoUtil = {     provinceAndCitys: {11:"北京",12:"天津",13:"河北",14 ...

  8. js调用浏览器打印

    <input type="button" id="print" onclick="printdiv('list');" value=& ...

  9. js-关于性能优化的一些学习总结

    性能优化的方法有: 1.减少HTTP请求:合并CSS/JS,使用CSS sprite等 2.压缩CSS/JS/图片 3.样式表放头部,JS放body底部:JS放在head中,将会等到js全部下载解析和 ...

  10. 【BZOJ-3709】Bohater 贪心

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 835  Solved:  ...