1.A==B?(http://acm.hdu.edu.cn/showproblem.php?pid=2054)
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
2.这个是很久之前做的,当时做的时候以为是很弱智的题目,三两下写完以后发现 Output Limit Exceeded,搞清楚它里面隐藏的信息后觉得这是一道很麻烦的远远不是只报 Output Limit Exceeded的题目就把它先放下了,如今暑假再来回头看,想要啃下这个难搞的问题,由于复习阶段放下了蛮久的,现在也在慢慢重新找回做题的感觉。
①c考虑的东西真的太多了,小数点的,0的,比如:在简单的A==B判断里,计算机中1.0跟1是会输入NO的,这个时候就需要我们去考虑,除掉小数点后面的0再比较了,那问题又来了,万一是1.0000000001呢,这就要用到两种不同顺序的循环做这个工作了
int i,j,len,flag=-1;
len = strlen(str);
for (i=0;i<=len-1; i++){
if (str[i] == '.'){
flag = i;
break;
}
}
if (flag>=0){
for (i=len-1;i>=0;i--){
if (str[i]!='0')break;
else str[i]='\0';
}
if (str[i]=='.') str[i] = '\0';
}
}
先寻找小数点,然后再从最小的位数开始循环,只要不为0就跳出去直接判断,为0则做清除工作(‘\0’)
ps:值得注意的问题是定义数组时容量大小要常规性定义到100000
②因为刚结束的这个学期刚好就学了java,就想用java也试一试这道曾经被我认为很棘手的题,然而.......知道java里有个东西叫BigDecimal类以后我哭了。然后!就直接无脑操作就完了!
对它的相关解释是这样的
java.math.BigDecimal.compareTo(BigDecimal val) 由BigDecimal对象与指定BigDecimal值进行比较。
两个BigDecimal对象的值相等,但有一个不同的比例(如2.0和2.00)都用这种方法视为相等。
此方法提供优先于个别方法的六个逻辑比较运算符 (<, ==, >, >=, !=, <=).
建议的习惯用法执行这些比较是的:(x.compareTo(Y) <op>0)
ps:要注意的是判断循环的时候要用sc.hasNext()方法返回boolean值,而不是直接sc.next(),还有最基本的oj上默认类名为Main。
java完整代码
import java.math.BigDecimal;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
BigDecimal A = sc.nextBigDecimal();
BigDecimal B = sc.nextBigDecimal();
if(A.compareTo(B)==0) System.out.println("YES");
else System.out.println("NO");
}
}
}
3.总结:这题来说用java简直比c舒服多了(应该很多题目都是),但是首先得了解java它有这个类有这个方法,从而才知道要去用这个;而c直接就是思维问题,要想解决一个问题,就得尽可能解析表面信息和隐藏信息,再去一个个突破,一不小心疏忽解不出来就是解不出来的。