我们学长出的一道水题。。新手不行

keyboarder_zsq 2015-11-07 07:05:44
Description:
给你一个等式,格式如“A = B”,请判断该等式左右两边表达式是否相等。 保证 A、B 为合法表达式,且表达式中只包含数字、空格,"+","-"。 注意:数字与运算符之间可能会出现若干空格,但数字中不会有空格。
Input:
首先输入一个数 T,表示有 T 组 case。每组 case 一行。 每组 case 给出一个长度不超过 1000 的等式,格式如上面描述。 输入数据直到文件结束。
Output:
如果 A 和 B 相等,输出 YES;否则,输出 NO。
Sample Input:
2
3+ 5 = 6 -2+ 4
3 +9-8+ 23 = 54 -52 + 2+ 6-8
Sample Output:
YES
NO
Hint: 建议字符串使用 gets()输
...全文
142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyboarder_zsq 2015-11-08
  • 打赏
  • 举报
回复
nice!非常感谢!
Enguei_99 2015-11-07
  • 打赏
  • 举报
回复
#include<stdio.h> #include<math.h> int main(){ int i,j,n,ans; char ch,tmp[20]; while(scanf("%d",&n)==1)//输入n,代表案例数 { getchar();//吞掉回车符 for(i=0;i<n;i++)//循环n次,每一次分成两大次输入,即,等号左边一次,等号右边一次 { strat: int sum=0,count=0,Q=1;//goto strat就是用来实现两次大输入的,下面while是输入等号的一边。 while(scanf("%c",&ch)&&ch!='='&&ch!='\n')//while一次输入等号的一边。等号左边的终止标志是‘=’,等号右边的终止标志是‘\0’ { if(ch=='+')Q=1; else if(ch=='-')Q=-1;//判断符号,标记 if('0'<=ch&&ch<='9')//当输入的字符出现数字的时候(已知数字连续) { for(j=0;ch!=' '&&ch!='+'&&ch!='-'&&ch!='\n'&&ch!='=';j++,count++)//循环输入连续的数字到tmp数组,count累计数字个数,当出现‘ ’‘+’‘-’‘=’‘\n’表示输入连续数字终止。大数的话只要把tmp数组变大,外加一个大数的计算函数即可。 { tmp[j]=ch; scanf("%c",&ch);//实现连续输入 } } if(count)//判断是否有(连续)数字出现 for(j=0;count;count--,j++) if(Q==1)sum+=(tmp[j]-'0')*pow(10.0,count-1);//符号标记Q用来判断是sum+,还是sum-。 else sum-=(tmp[j]-'0')*pow(10.0,count-1); if(ch=='\n'||ch=='=')break;//出现‘\n’‘=’,跳出while循环,一次大输入结束 } if(ch=='=')//如果是等号说明还有‘等号右边’没有输入 { ans=sum;//储存sum值 goto strat;//返回输入‘等号右边’ } else//这里的else即是‘\n’的情况,表示一次完整输入结束 { if(ans==sum)printf("YES\n");//与上半次储存的sum值比较,相等输出YES,不相等输出NO else printf("NO\n"); } } } return 0; }

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧