读书人

A+B-C=5, A B C 是0-9的整数怎么算出

发布时间: 2012-02-07 17:45:36 作者: rapoo

A+B-C=5, A B C 是0-9的整数,如何算出全部符合条件的ABC ?
A+B-C=5, A B C 是0-9的整数,如何算出全部符合条件的ABC ?
算式中有 + - * / 运算 形如
A/C +B=7
A*B+C/3=8
A+B/C-B/2=3
......

[解决办法]
实现上面你说的功能,可以调用MSScriptControl的Eval()函数。下面是Delphi实现的代码,我无法给你译成C++

uses ComObj;

function MathStr(const Str : string) : string;
var
vScriptControl : OLEVariant;
begin
try
vScriptControl := CreateOleObject( 'MSScriptControl.ScriptControl ');
vScriptControl.Language := 'VBScript ';
result := vScriptControl.Eval(Str);
except
result := ' ';
end;
end;
[解决办法]
如果仅仅是Edit1输入算式,完全可以通过控制
限制Edit1的输入,通过分解公式达到简单计算器
的功能

以下代码实现简单非负整数按照输入顺序的四则运算结果求取,
计算结果续进Edit1

不必穷举ABC,改个思路看看
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//自然数;
//按输入先后计算 ,不按四则运算顺序

if(!InputValid())
{
Edit1-> Text= " ";
return;
}

String s;
s=Edit1-> Text.Trim();
s=AnsiReplaceStr(s, "+ ", ",+, ");//#include <StrUtils.hpp>
s=AnsiReplaceStr(s, "- ", ",-, ");
s=AnsiReplaceStr(s, "* ", ",*, ");
s=AnsiReplaceStr(s, "/ ", ",/, ");
// ShowMessage(s);
__int64 x,tmp64;
TStringList *thelist=new TStringList;
thelist-> CommaText=s;
x=StrToInt64(thelist-> Strings[0]);
thelist-> Delete(0);
while(thelist-> Count> 0)
{
tmp64=StrToInt64(thelist-> Strings[1]);
if(thelist-> Strings[0]== "+ ")x+=tmp64;
if(thelist-> Strings[0]== "- ")x-=-tmp64;
if(thelist-> Strings[0]== "* ")x*=tmp64;
if(thelist-> Strings[0]== "/ ")x/=tmp64;
thelist-> Delete(0);
thelist-> Delete(0);
}
Edit1-> Text=Edit1-> Text+ "= "+IntToStr(x);
delete thelist;thelist=0;
}
//---------------------------------------
bool TForm1::InputValid()
{
bool rev;
rev=true;
String s;
s=Edit1-> Text.Trim();
int tl;
tl=s.Length();
for(int k=1;k <tl+1;k++)
{
if(s[k]> = '0 '&&s[k] <= '9 ')continue;
if(s[k]== '+ ')continue;
if(s[k]== '- ')continue;
if(s[k]== '* ')continue;
if(s[k]== '/ ')continue;
rev=false;
break;
}
if(s[1]== '+ '||s[1]== '- '||s[1]== '* '||s[1]== '/ ' )rev=false;
if(s[tl]== '+ '||s[tl]== '- '||s[tl]== '* '||s[tl]== '/ ' )rev=false;
return rev;
}
//---------------------------------------


[解决办法]
表达式计算,网上有一堆,也有很多第三方的控,如有名的rxlib,我一般用Colin Wilson的cmpEvaluator(它用pascal写的)
最简的应用为:
#include "cmpEvaluator.hpp "
...
TExpressionEvaluator *p=new TExpressionEvaluator(this);
p-> Expression= "1+2/3-2/2 ";
ShowMessage((double)p-> Calculate());

读书人网 >C++ Builder

热点推荐