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