GTY‘s math problem
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 146 Accepted Submission(s): 80
Problem Description
GTY is a GodBull who will get an Au in NOI . To have more time to learn algorithm knowledge, he never does his math homework. His math teacher is very unhappy for that, but she can‘t do anything because GTY can always get a good mark
in math exams. One day, the math teacher asked GTY to answer a question. There are four numbers on the blackboard -
a,b,c,d.
The math teacher wants GTY to compare ab
with cd.
Because GTY never does his homework, he can‘t figure out this problem! If GTY can‘t answer this question correctly, he will have to do his homework. So help him!
Input
Multi test cases (about 5000). Every case contains four integers a,b,c,d(1≤a,b,c,d≤1000)separated
by spaces. Please process to the end of file.
Output
For each case , if ab>cd
, print ‘>‘. if ab<cd
, print ‘<‘. if ab=cd
, print ‘=‘.
Sample Input
2 1 1 2 2 4 4 2 10 10 9 11
Sample Output
> = <
Source
这个数据一看就知道不能用普通的方法。
1000的1000次方。
C语言无法表达的。
可以想到用对数。
比较log(a^b) 和log(c^d)的大小
而log(a^b)=b*log(a);
log(c^d)=d*log(c);
OK
可以写代码了。
控制到12点后十二位就可以认为它们相等了
#include <stdio.h> #include <math.h> #define eps 1e-12 //10的负十二次方 int main() { double a,b,c,d; while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!=EOF) { double s,s1; s=b*log(a); s1=d*log(c); if(a==1 &&c==1) //等于肯定都是相等的 { printf("=\n"); continue; } if(fabs(s-s1)<eps) //对数计算后,相差只要不超过10的负十二次方,就可以认为它们相等。 printf("=\n"); else if(s>s1) printf(">\n"); else if(s<s1) printf("<\n"); } return 0; }
HDU 5170 GTY's math problem (bsst code #29 1001)