网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月16日漏签0天
acm吧 关注:26,771贴子:48,519
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回acm吧
>0< 加载中...

杭电acm1237求解错啊,测了多组数据啊

  • 只看楼主
  • 收藏

  • 回复
  • 碎尽一世流光
  • 小幸运星
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
template <class T>
class sqstack
{
T *base;
int top;
int size;
public:
void push(T x);
T gettop();
T pop();
sqstack(int m);
~ sqstack(){delete [] base;top=0;size=0;}
int isp(char);
int icp(char);
friend void cal1(char *exp,char *postexp,int sum);
};
template <class T>
sqstack<T>::sqstack (int m)
{
if(base==NULL)
{
cout<<"fail"<<endl;
exit(1);
}
base=new T[m];
size=m;
top=-1;
}
template<class T>
void sqstack<T>::push(T x)
{
if(top==size-1)
throw "zhanman,fail";
top++;
base[top]=x;
}
template <class T>
T sqstack<T>::pop()
{
T x;
x=base[top--];
return x;
}
template<class T>
T sqstack<T>::gettop ()
{
return base[top];
}
int isp(char ch3)
{
switch(ch3)
{
case '#':return 0;break;
case'(':return 1;break;
case'*':
case'/':return 5;break;
case'+':
case'-':return 3;break;
case')':return 6;break;
default :return 0;break;
}
}
int icp(char ch4)
{
switch(ch4)
{
case '#':return 0;break;
case'(':return 6;break;
case'*':
case'/':return 4;break;
case'+':
case'-':return 2;break;
case')':return 1;break;
default :return 0;break;
}
}
int in(char t)
{
switch(t)
{
case')':
case'(':
case'+':
case'-':
case'*':
case'/':
case'#':return 1;
default:return 0;
}
}
double operate(double a,char t,double b)
{
switch(t)
{
case'+':return (a+b);break;
case'-':return(a-b);break;
case'/':return (a/b);break;
case'*':return (a*b);break;
default:return 0;break;
}
}
void cal1(char *exp,char *postexp,int sum)
{
char c;
char x='@';
sqstack<char>op(50);
int i=0;
op.push('#');
c=*exp++;
while(c)
{
if((c>='0'&&c<='9')||c=='.')
{
postexp[i++]=c;
c=*exp++;
}
if(in(c))
{
postexp[i++]=' ';
x=op.gettop();
if(isp(x)<icp(c))
{
op.push (c);
c=*exp++;
}
else if(isp(x)>icp(c))
{
postexp[i++]=op.pop ();
}
else
{
if(x=='(')
{
op.pop();
c=*exp++;
i--;
}
}
postexp[i]='\0';
}
if(x=='#'&&c=='#')
break;
}
}
double cal2(char *postexp)
{
int i;
sqstack<float>oz(50);
char z[50];
double v=0,d=0,a,b;
char c;
c=*postexp++;
while(c!='\0')
{
if((c>='0'&&c<='9')||c=='.')
{
i=0;
do
{
z[i++]=c;
c=*postexp++;
}while((c>='0'&&c<='9')||c=='.');
z[i]='\0';
d=atof(z);
oz.push(d);
}
if(in(c))
{
b=oz.pop();
a=oz.pop();
oz.push(operate(a,c,b));
c=*postexp++;
}
c=*postexp++;
}
v=oz.pop();
return v;
}
int main()
{
int sum,i;
double s;
char str[201];
while(cin.getline(str,201,'\n'))
{
char exp[201]={'0'};
char postexp[402]={'0'};
for(i=0;i<strlen(str);i++)
{
if(str[i] != '0')
break;
}
if (i == strlen(str))
break;
for(int i=0,j=0;i<strlen (str);i++,j++)
{
if(str[i]!=' ')
exp[j]=str[i];
else
j--;
}
*postexp='\0';
sum=strlen(exp);
exp[sum]='#';
cal1(exp,postexp,sum);
s=cal2(postexp);
cout<<setiosflags(ios::fixed);
cout<<setprecision(2)<<s<<endl;
//memset(exp,'0',sizeof(exp));
memset(str,'0',sizeof(str));
//memset(postexp,'0',sizeof(postexp));
}
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回acm吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示