您的位置:首页 > 其它

zoj 2492 A DP Problem

2011-09-06 13:39 218 查看
嘿嘿,做课程设计,我写的是计算器,本来还愁界面该怎么弄,后来看到这道计算方程式就来了灵感,干脆就加一个这功能吧,呵呵。。。。我写的比这个还复杂些,这道题计算出结果后向下取整就行了(用floor(double x)函数,原型 double floor(double x)返回的是取整后的浮点数)。。。。。


用到栈方面的知识,我在计算器里把功能扩展了,输入的数可以带小数点。。。。。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int temp;
int x1,x2;   //x1是所有x(全放在'='号左边)的系数和,x2是所有常数(全放在'='号右边)的和
char s[1000],ch;
int isNumber(char x)//判断是不是数
{
if(x>='0'&&x<='9')
return 1;
else
return 0;
}
int toNumber()  //转化为数据
{
int y=0;
while(isNumber(ch))
{
y+=ch-'0';
ch=s[temp++];
if(isNumber(ch))
y*=10;
}
return y;
}
void cacul()
{
int len=strlen(s),t,pp=1,m=1;
ch=s[temp];
while(ch!='\0')
{
if(m==1)
{
ch=s[temp++];
if(isNumber(ch)||ch=='x') //处理第一个字符为'-'的情况
{
ch='+';
temp--;
}
m=2;
}
switch(ch)
{
case '+':{
ch=s[temp++];
if(ch=='x')  //x的系数为1
{
if(pp==1)
x1+=1;
else
x1-=1;
ch=s[temp++];
}
else
{
if(isNumber(ch))
{
t=toNumber();
if(ch=='x')
{
if(pp==1)
x1+=t;
else
x1-=t;
ch=s[temp++];
}
else
{
if(pp==1)
x2-=t;
else
x2+=t;
}
}
}
break;
}
case '-':{
ch=s[temp++];
if(ch=='x')
{
if(pp==1)
x1-=1;
else
x1+=1;
ch=s[temp++];
}
else
{
if(isNumber(ch))
{
t=toNumber();
if(ch=='x')
{
if(pp==1)
x1-=t;
else
x1+=t;
ch=s[temp++];
}
else
{
if(pp==1)
x2+=t;
else
x2-=t;
}
}
}
break;
}
case '=':{
ch=s[temp++];
if(isNumber(ch)||ch=='x')
{
ch='+';
temp--;
}
pp=2;
break;
}
}
}
}
int main()
{
int ncase;
double m;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%s",s);
temp=0;
x1=0;
x2=0;
cacul();
if(x1==0)
{
if(x2==0)
printf("IDENTITY\n");
else
printf("IMPOSSIBLE\n");
}
else
{
m=x2*1.0/x1;
printf("%d\n",(int)floor(m));
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: