2 1 1 2 2 4 4 2 10 10 9 11
> = <
这个数据一看就知道不能用普通的方法。
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)
原文地址:http://blog.csdn.net/sky_miange/article/details/43611547