做不来,帮帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/06/27 03:35:53
4、计算器的改良(2000-1)

问题描述

NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

4+3x=8
6a-5+1=2-2a
-5+12y=0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“—”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

问题求解

编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。

你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

样 例

输入:

6a-5+1=2-2a

输出:

a=0.750
偶用pascal,

看样子好像是IOI的题目?
没有乘除所以没有优先级的样子,所以顺序扫描旧好,不用词法分析啦
偶用javascript写的,FF下调试通过,希望有所帮助~
function getNextNum(s,index){
var result = '';
var type = 'num';//[num,var]
while(s[index] < '0' || s[index] > '9'){
if(s[index]=='-') result += s[index];
index ++;
}
for (;index<s.length;index++){
var c=s[index];
if(c >= '0' && c <= '9')
result += c;
else if(c >= 'a' && c <='z'){
result += c;
type = 'var';
}
else break;
}

return {rs:result,type:type,index:index};
}
function main() {
var s="6a -5+1=2-2a";
s=s.replace(/ /g,'')

var i=0;
var sign=1;
var rightExpr = false;
var result=0;
var varName='';
var varPara=0;
while(i<s.length){
var obj = getNextNum(s,i);
var n