想不出来就采用枚举法吧,代码写起来还是很简单的,当然代码写的不怎么样,也不考虑设计效率等等问题了,理论上这种类型的都可以这么拼出来,比较初级的做法,但轻松解决问题。注意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. Bete冲刺第七阶段

    Bete冲刺第七阶段 今日工作: web: 新增通知处理接口 ios: 重写登录逻辑,添加创建行程填写.注册 POP界面 目前所遇问题: web: web目前进展顺利,暂时还没有遇到编码的问题. iO ...

  2. MyBatis dao层 方法传参

    MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSER ...

  3. iOS开发--QQ音乐练习,歌词的展示,歌词的滚动,歌词的颜色变化

    一.歌词的展示 -- 首先歌词是在scrollView上,scrollView的大小是两个屏幕的宽度 scrollView滚动修改透明度的代码                             ...

  4. sql 定义自增id插入数据

    -- 定义一个自增变量 ; -- 执行自增语句 ,sponsorbroker,,, from stock_listing_detailed_info group by sponsorbroker;

  5. AFnetworking3.1的基本使用

    听说之后AFHttpWorking版本可能会影响到苹果的审核,今天下了最新版本的AFHttpWorking,并且做了简单的封装,我这里是通过cocoapods下载了两个工具 1=AFHttpWorki ...

  6. JDK与Java SE/EE/ME的区别

    1. Java SE(Java Platform,Standard Edition). Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用 ...

  7. Android成长日记-ProgressBar的设计

    ProgressBar的关键属性 Android:max=”100” - ---最大显示进度 Android:progress=”50”----第一显示进度 Android:secondaryProg ...

  8. C# winform窗体设计-通过条件查询数据

    在winform 数据库设计中,有时候需要通过条件查询对应的数据,并且将数据显示在文本框(or 富文本框)中,下面,小编将讲述通过一个条件: 首先,我们需要对数据库建立连接,并且执行数据库命令,在此之 ...

  9. Circular Queue Implementation Principle

    目录 . 引言 . 环形队列的实现原理 . 环形队列编程实现 . 环形队列的内核实现 1. 引言 环形队列是在实际编程极为有用的数据结构,它有如下特点 . 它是一个首尾相连的FIFO(First In ...

  10. CMD.EXE中dir超长字符串缓冲区溢出原理学习

    最近看逍遥的<网络渗透攻击与安防修炼>讲到CMD命令窗口的dir传超长字符串溢出的例子.自己实验了一下,的确会产生程序崩溃,但是具体什么原理没太详细说,这里做一下原理探究,权当学习笔记了. ...