您的位置:首页 > 其它

递归实现的计算器

2011-11-29 14:55 253 查看
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define MX 100
char exp[MX];
int pos;

int num();
void error();
int plus();

int add(){
int sum = plus();
char opt;
while(pos<(int)strlen(exp)){
opt = exp[pos];
if(opt=='+'){
pos++;
sum += plus();
}
else if(opt=='-'){
pos++;
sum -= plus();
}else
break;
}
return sum;
}

int plus(){
int sum = num(), t;
char opt;
while(pos<(int)strlen(exp)){
opt = exp[pos];
if(opt=='*'){
pos ++;
sum *= num();
}
else
if(opt=='/'){
pos++;
if((t=num()))
sum /= t;
else
error();
}
else
break;
}
return sum;
}

void error(){
printf("Error!\n");
exit(0);
}

int num(){
int sum = 0;
if(exp[pos]=='('){
pos++;
sum = add();
if(exp[pos]!=')')
error();
else
pos++;
return sum;
}
while(exp[pos]>='0'&&exp[pos]<='9'){
sum *= 10;
sum += exp[pos]-'0';
pos++;
}
return sum;
}

void main(){
freopen("in.txt", "r", stdin);
while(scanf("%s", exp)!=EOF)
printf("%d\n", add());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: