机房大佬改编的题,给高一的考试用的,去上课的时候教练让我们也做了做,确实是很生疏了,写下一些当时犯得错误吧

  T1:

Give fen(nixiofyy)
Description
Yy:这题怎么做啊?
Ff:自己想。
Yy:这题怎么做啊?
Ff:这么简单的题都不会啊!
Yy:这题怎么做啊?
Ff: 这不就是那个******。
一日,再一次被bs之后,yy终于忍无可忍了。决定出点题难住ff,好打压一下ff嚣张的气焰。
不过,由于yy的智商有限,只会加减法,经过商讨,总是让ff回答诸如a+b或者a-b之类的问题,似乎难不住他。终于,yy想到一个很NB的办法:让他算a+?=b。yy:这么NB的难题都被我想到了,哈哈!
Ff:这么简单的题都不会,不就是……
Input
输入一个等式,形如A+B=C或A-B=C。给定其中的两个数,请确定其中的第三个数。其中0<=A,B,C<10000000000,没有给定的数用一个单独的“?”表示,等式中没有多余空格。
Output
直接输出要求的第三个数,用回车结尾。

Sample Input 1
1+2=?
Sample Output 1
3

Sample Input 2
1+?=3
Sample Output 2
2

  这题,感觉对于会写读入优化的人来说都是很简单的,直接处理一下字符串判断一下问号在哪里就ok了

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 #include<string>
 6 using namespace std;
 7 string s;
 8 long long a,b,c;
 9 bool flag;
10 int len;
11 int p;
12 void work1()
13 {
14     p++;
15     flag= s[p]=='+'?1:0;
16     p++;
17     while(isdigit(s[p]))
18     {
19         b=b*10+s[p]-'0';p++;
20     }    
21     p++;
22     while(isdigit(s[p])&&p<len)
23     {
24         c=c*10+s[p]-'0';p++;
25     }
26     if(flag)a=c-b;
27     else a=c+b;
28     printf("%lld",a);
29     exit(0);
30 }
31 void work2()
32 {
33     p++,p++;
34     while(isdigit(s[p])&&p<len)
35     {
36         c=c*10+s[p]-'0';p++;
37     }
38     if(!flag)b=a-c;
39     else b=c-a;
40     printf("%lld",b);
41     exit(0);
42 }
43 int main()
44 {
45     freopen("nixiofyy.in","r",stdin);
46     freopen("nixiofyy.out","w",stdout);
47     cin>>s;
48     len=s.length();
49     p=0;
50     if(s[p]=='?')work1();
51     while(isdigit(s[p]))
52     {
53         a=a*10+s[p]-'0';p++;
54     }
55     flag= s[p]=='+'?1:0;
56     p++;
57     if(s[p]=='?')work2();
58     while(isdigit(s[p]))
59     {
60         b=b*10+s[p]-'0';p++;
61     }
62     if(flag)c=a+b;
63     else c=a-b;
64     printf("%lld",c);
65     return 0;
66 }
View Code

相关文章: