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