Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print "YES", or print "NO".
Sample Input
1 2
2 2
3 3
4 3
Sample Output
NO
YES
YES
NO
正确代码
#include<iostream> #include<cstring> #include<string> using namespace std; int main(){ char a[100000],b[100000]; while(cin>>a>>b){ int Y_a=0,Y_b=0; for(int i=0;i<strlen(a);i++) if(a[i]=='.'){ Y_a=1; break; } for(int i=0;i<strlen(b);i++) if(b[i]=='.'){ Y_b=1; break; } if(Y_a){ for(int i=strlen(a)-1;i>=0;i--){ if(a[i]=='0'){ a[i]=0; } else if(a[i]=='.'){ a[i]=0; break; } else break; } } // if(Y_a) { // cout<<"!!!"<<a<<' '<<a[1]<<endl; // } if(Y_b){ for(int i=strlen(b)-1;i>=0;i--) if(b[i]=='0'){ b[i]=0; } else if(b[i]=='.'){ b[i]=0; break; } else break; strcmp(a,b)?puts("NO"):puts("YES"); } }
题意理解
起初做这道题的时候以为这是一个签到题,直到wrong了五次发现这存在着潜在的问题,既是浮点型如0.111000和数据极大的问题没有解决,因此应该进行判断是否带有小数点并且去掉小数点后多余的0。
错误以及解决方法
当看到这个题的第一眼以为是一个很简单的签到题,所以进行了一下程序的编写
事实上这道题目并没有想象中的那么简单,还有浮点型和越界问题没有解决,当意识到这个问题之后整个题目就显得非常简单明了了,但是还是会犯一些小错误,比如以下代码
导致这个代码wrong的原因是因为没有初始化,往往这种小的错误最不容易令人察觉,使用全局变量的同时应该考虑的是在进行运行循环的时候上一次的赋值会不会导致下一次循环的错误结果。经过对flog的初始化后,成功AC了题目。