解方程

来源:互联网 发布:gb1229厚度 javascript 编辑:程序博客网 时间:2024/05/05 09:46

power oj-1023:解方程

题面链接

  • 题意

    输入一个一元一次方程,解出x的值(x为整数,当x>=0时,舍去小数部分,当x<0时向下取整

  • 输入

    输入为合法输入(长度l<=255),允许’+’,’-‘,’=’三种符号

  • 输出

    当答案为无数个时输出IDENTITY
    当方程无解时输出IMPOSSIBLE
    其他情况直接输出x的答案

  • 样例输入

    3
    2x-27+5x+300=98x
    x+2=2+x
    x+2=x+5

  • 样例输出

    3
    IDENTITY
    IMPOSSIBLE

  • 完整代码

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){    int i,j,k,t,t1,n,l,flag,flag1,sum,temp,tempt1;    float sumx,sum1,ans;    char a[3000];    scanf("%d",&n);    while(n--)    {        scanf("%s",a);        l=strlen(a);        flag=0;        flag1=0;        sumx=0;        sum1=0;        sum=0;        temp=0;        t=0;        if(a[0]!='+'&&a[0]!='-')        {            t=-1;        }        for(i=1;i<l;i++)        {            if(a[i]=='+'||a[i]=='-'||a[i]=='='||i==l-1)            {                if(i==l-1)                    i++;                t1=i;                tempt1=t1;                k=1;                if(flag==1)                {                    if(a[t+1]=='+'||a[t+1]=='-')                    {                         t++;                         continue;                    }                    flag++;                }                if(flag==0)///当“=”还未出现时                {                    if(t1-t==2&&a[t1-1]=='x')                    {                        flag1=1;///x的情况已经运算过了                        if(t==-1||a[t]=='+')                            sumx++;                        else                            sumx--;                    }                    else if(a[t1-1]=='x')                    {                        t1--;                    }                    for(j=t1-1;j>t;j--)                    {                        sum+=(a[j]-'0')*k;                        k*=10;                    }                    if(a[t1]=='x'&&flag1==0)                    {                        if(a[t]=='+'||t==-1)                            sumx+=sum;                        else                            sumx-=sum;                    }                    else if(a[t1]!='x'&&flag1==0)                    {                        if(a[t]=='+'||t==-1)                            sum1-=sum;                        else                            sum1+=sum;                    }                    flag1=0;                }                else///当“=”出现时                {                    if(t1-t==2&&a[t1-1]=='x')                    {                        flag1=1;///x的情况已经运算过了                        if(t==temp||a[t]=='+')                            sumx--;                        else                            sumx++;                    }                    else if(a[t1-1]=='x')                    {                        t1--;                    }                    for(j=t1-1;j>t;j--)                    {                        sum+=(a[j]-'0')*k;                        k*=10;                    }                    if(a[t1]=='x'&&flag1==0)                    {                        if(a[t]=='+'||t==temp)                            sumx-=sum;                        else                            sumx+=sum;                    }                    else if(a[t1]!='x'&&flag1==0)                    {                        if(a[t]=='+'||t==temp)                            sum1+=sum;                        else                            sum1-=sum;                    }                    flag1=0;                }               t=tempt1;               sum=0;            }            if(a[i]=='=')            {                flag=1;///标记已经出现“=”                temp=i;            }        }        if(sumx==0&&sum1!=0)            printf("IMPOSSIBLE\n");        else if(sumx==0&&sum1==0)            printf("IDENTITY\n");        else        {            ans=sum1/sumx;            if(sum1==0)                ans=0;///防止-0的情况出现            if(ans<0&&ans!=int(ans))                ans--;///当x为负时并且x为小数时向下取整            printf("%0.f\n",ans);        }    }    return 0;}
0 0
原创粉丝点击