当前位置: 代码迷 >> 综合 >> zcmu-1562: 比较大小(对数运算精度大数)
  详细解决方案

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

热度:7   发布时间:2023-12-26 10:21:48.0

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;
}