洛谷 P1689 方程求解

题目描述

给一个方程,形如X+Y=Z或X-Y=Z。给出了其中两个未知数,请求出第三个数。未知数用‘?’表示,等式中也许会出现一些多余的空格。

输入输出格式

输入格式:

 

一行,方程。

 

输出格式:

 

‘?’代表的值

 

输入输出样例

输入样例#1: 复制
样例输入1
1+2=?

样例输入2
3 +? =  2
输出样例#1: 复制
样例输出1
3

样例输出1
-1

说明

0<=X,Y,Z<1,000,000,000

思路:模拟

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char sym,ch;
int data[3];
char s[10005];
int k,pos,tot,n;
int main(){
    while(scanf("%c",&ch)!=EOF){
        if(ch==' ') continue;
        if(ch=='\n') break;
        s[n++]=ch;
    }
    tot=1;
    for(int i=0;i<n;i++){
        if(s[i]=='?'){ pos=tot;continue; } 
        if((s[ i ]==' ')||(s[i]=='='))    continue;
        if((s[ i ]=='+')||(s[i]=='-')){ sym=s[i];continue; }
        if((s[i]<='9')&&(s[i]>='0')){
            k=0;
            while(((s[i]<='9')&&(s[i]>='0'))||(s[i]==' ')){
                if(s[i]==' ')    i++;
                else{ k=k*10+s[i]-'0';i++; }
                if(i==n)    break;
            }
            i--;
            data[tot++]=k;
        }
    }
    if(sym=='+')
        if(pos==3)    printf("%d",data[1]+data[2]);
        else    printf("%d",data[2]-data[1]);
    else if(pos==1 )    printf("%d",data[1]+data[2]);
    else printf("%d",data[1]-data[2] );
    return 0;
}

 

posted @ 2017-11-23 21:37  一蓑烟雨任生平  阅读(452)  评论(0编辑  收藏  举报