zcmu-1562: 比较大小(对数运算&&精度&&大数)

1562: 比较大小

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 481  Solved: 157
[Submit][Status][Web Board]

Description

众所周知,GTY是一位神犇,为了更好的虐场,他从来不写数学作业而是去屠题,他的数学老师非常不爽,但由于GTY每次考试都AK,她也不能说什么,有一天老师在黑板上写了四个数——a,b,c,d
然后让GTY比较a的b次c的d次的大小,由于GTY不屑于虐这道题,就把这个问题交给你了。

Input

多组数据(约5000组),每组数据包含4个整数a,b,c,d(1≤a,b,c,d≤1000),用空格隔开

Output

对于每组数据,若a的b次>c的d次,输出”>”, 若a的b次<c的d次,输出”<”, 若a的b次=c的d次输出”=”。

Sample Input

2 1 1 2

2 4 4 2

10 10 9 11

Sample Output

>

=

<

HINT

 注意精度

【分析】

  1. 幂的话会很大,所以想用Java的大数做,但是处理不好。看了下别人的思路才知道这个可以简化的。
  2. 左右两边取对数,数据就会变得小了。但是在比较是否相等时要注意精度,定义一个很小很小的数,如果相减的结果小于该数则表示几乎可以看做两数相等了。
#include<bits/stdc++.h>
using namespace std;
int main(){
	double a,b,c,d,s1,s2;
        double eps=1e-12;
	while(~scanf("%lf%lf%lf%lf",&a,&b,&c,&d)){
		s1=b*log(a);
		s2=d*log(c);
		if(fabs(s1-s2)<eps){
			printf("=\n");
		}
		else if(s1>s2){
			printf(">\n");
		}
		else if(s1<s2){
			printf("<\n");
		}
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_38735931/article/details/81456159