1 + 2 4 + 2 * 5 - 7 / 11 0
3.00 13.36
这道题 我竟无言以对。。
其实也就是模拟计算器。因为这里没有小括号 很简单。只需要判断当前运算符和下一个运算符的优先级
就行,分别用两个栈存贮数字和符号,我用的数组。
我就是因为一个数据不对 而且我也找不出来。。浪费了N多时间。
有几个注意的地方
1:如果输入的第一个数字是0 例如0 + 2 + 3应该输出5.00 而不是结束
2:如果输入的是0(空格)(换行)应该输出0.00(我错在了这里。。气死了)
3. 数字可能是两位及两位以上
最后换换输入方式 就对了。附上wa和ac的代码
ac:
#include <stdio.h>
#include <string.h>
int main()
{
char fuhao[100],str[205];
double num[100],sum;
while(gets(str)&&strcmp(str,"0")!=0)
{
int len=strlen(str);
int t=0,q=0;
memset(num,0,sizeof(num));
memset(fuhao,0,sizeof(fuhao));
for(int i=0;i<len;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
double temp=0;
while(str[i]>='0'&&str[i]<='9')
temp=temp*10+str[i]-'0',i++;
num[q++]=temp;
}
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
fuhao[t++]=str[i];
}
memset(str,0,sizeof(str));
sum=num[0];
for(int i=1;i<q;i++)
num[i-1]=num[i];
for(int i=0;i<t;i++)
{
if(fuhao[i]=='*')
sum=sum*num[i];
else if(fuhao[i]=='/')
sum=sum/num[i];
else if(fuhao[i]=='+')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum+temp;
}
else
sum=sum+num[i];
}
else if(fuhao[i]=='-')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum-temp;
}
else
sum=sum-num[i];
}
}
printf("%.2lf\n",sum);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char fuhao[200];
double num[200],sum;
while(scanf("%lf",&sum)!=EOF)
{
char mark=getchar();
if(mark=='\n'&&sum==0)
{
printf("%.2lf\n",sum);
continue;
}
memset(fuhao,0,sizeof(fuhao));
memset(num,0,sizeof(num));
int t=0;
while(1)
{
scanf("%c",&fuhao[t]);
scanf("%lf",&num[t]);
mark=getchar();
if(mark=='\n')
break;
t++;
}
for(int i=0;i<=t;i++)
{
if(fuhao[i]=='*')
sum=sum*num[i];
else if(fuhao[i]=='/')
sum=sum/num[i];
else if(fuhao[i]=='+')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/')
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum+temp;
}
else
sum=sum+num[i];
}
else if(fuhao[i]=='-')
{
if(fuhao[i+1]=='*'||fuhao[i+1]=='/')
{
double temp=num[i];
while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t)
{
if(fuhao[i+1]=='*')
temp=temp*num[i+1];
else
temp=temp/num[i+1];
i++;
}
sum=sum-temp;
}
else
sum=sum-num[i];
}
}
printf("%.2lf\n",sum);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/su20145104009/article/details/47374383