表达式计算
在数据结构课上,老师给大家布置了一个表达式计算的问题 32+15. It’s so easy!!! csw同学做了很不过瘾,他想求解更复杂的表达式: 比如(123+456)/789. 但一时之间他想不出好的办法,诸位就帮帮他吧.
输入
输入包括多组数据, 每组测试数据占一行, 包含一个字符串(长度不超过100), 表示要运算的表达式.
输出
对应每组测试数据, 输出计算结果(保留三位小数)
样例输入
(123+456)/789
样例输出
0.734
代码:
#include<stdio.h>
int prime(int n){//sushu
int prime=1;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
prime=0;
break;
}
}
return prime;
}
int i;
double jiajian(char a[]);
double chen(char a[]);
double f(char a[]);
int main()
{
char a[100] = { 0 };
double x;
while (gets(a) != NULL)
{
i = 0;
x=jiajian(a);
printf("%.3lf\n", x);
}
return 0;
}
double jiajian(char a[])
{
double s = chen(a);
int flag = 1;
while (flag)
{
if (a[i] == '+' || a[i] == '-')
{
char c = a[i];
i++;
double value = chen(a);
if (c == '+')
s=s+value;
else
s=s-value;
}
else
flag = 0;
}
return s;
}
double chen(char a[])
{
double s = f(a);
while (1)
{
char c = a[i];
if (c == '*' || c == '/')
{
i++;
double value = f(a);
if (c == '*')
s=s*value;
else
s=s/value;
}
else
break;
}
return s;
}
double f(char a[])
{
double s = 0,value=0;
char c = a[i];
int flag = 1, point = 1, j = 1;
if (c == '(')
{
i++;
s=jiajian(a);
i++;
}
else
{
if (i>0&&a[i-1]=='-')
flag = -1;
while (((a[i]>='0')&&(a[i]<='9'))||a[i]=='.')
{
if (a[i]=='.')
{
point=0;
i++;
}
if (point)
s=s*10+a[i++]-'0';
else
{
value = value * 10 + a[i++] - '0';
j *= 10;
}
}
}
return s+value/j;
}