表达式计算

表达式计算

在数据结构课上,老师给大家布置了一个表达式计算的问题 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;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值