先说明下题:Hdu 1237..,简单计算器
制作一个简单计算器,只有加减乘除(没有括号),并且大于0,每个数和字符之间有空格。(保留两位小数)
例如
1 + 2
4 + 2 * 5 - 7 / 11
输出
3.00
13.36
我的思路是式子是一串字符串,我提取出数字到a[]
加减乘除这些字符到b[],然后先不计算总体结果,如果是减就把减后面的数变为负数,加不变,如果是乘就把乘后面的数等于后面的乘前面的,并把前面的赋值为零,除法类似,这样最后把a[]加起来就是总了,可是我输入很多数据测试后都对了,提交后是wa,下面是我的代码,求指教错误,大神。
#include<iostream>
#include<string>
#include<iomanip>
#include<stdio.h>
using namespace std;
int main()
{
string s;
double sum=0,r=0;
double a[200];
int j=0,h=0;
char c[200];
while(getline(cin,s))
{ if(s[0]=='0'){break;}
sum=0; h=0;j=0;
for(int i=0;i<200;i++)
{ a[i]=0; c[i]='u'; }
for(int i=0;i<s.length();i++)
{
if(s[i]>='0'&&s[i]<='9')
{ r=r*10+s[i]-'0'; while(s[i+1]>='0'&&s[i+1]<='9') { r=r*10+s[i+1]-'0'; i++; } a[h]=r; r=0; h++; }
if(s[i]=='+'||s[i]=='/'||s[i]=='*'||s[i]=='-') { c[j]=s[i]; j++; }
}
for(int i=0;i<j;i++)
{ if(c[i]=='-')
{ a[i+1]=-a[i+1]; }
if(c[i]=='*')
{ a[i+1]=a[i]*a[i+1];
a[i]=0; }
if(c[i]=='/')
{ a[i+1]=a[i]/a[i+1];
a[i]=0; }
}
for(int i=0;i<h;i++)
{ sum+=a[i]; }
printf("%.2lf\n",sum);
}
return 0;
}