hdu 5170 精度控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5170 精度控制相关的知识,希望对你有一定的参考价值。

众所周知,GTY是一位神犇,为了更好的虐场,他从来不写数学作业而是去屠题,他的数学老师非常不爽,但由于GTY每次考试都AK,她也不能说什么,有一天老师在黑板上写了四个数——a,b,c,da,b,c,d 然后让GTY比较a^ba?b??和c^dc?d??的大小,由于GTY不屑于虐这道题,就把这个问题交给你了。
输入描述
多组数据(约5000组),每组数据包含4个整数a,b,c,d(1 \leq a,b,c,d \leq 1000)a,b,c,d(1a,b,c,d1000),用空格隔开
输出描述
对于每组数据,若a^ba?b??>c^dc?d??,输出”>”, 若a^ba?b??<c^dc?d??,输出”<”, 若a^ba?b??=c^dc?d??,输出”=”
输入样例
2 1 1 2
2 4 4 2
10 10 9 11
输出样例
>
=
<

这道题无需使用大数类,因为可以转换为对数log,而log(a^b)=b*log(a)
但很显然log求出来的都是小数,最后要用double存答案,
求>,<都很简单,但是要求两个double是否相等绝对不能仅仅==,应该写成fabs(x1-x2)<eps
eps设的越小精度越大,一般来说设到10的-10次方就够了
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define eps 1e-10
int main()
{
    int a,b,c,d;
    double tmp1,tmp2;
    while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
    {
        tmp1=log(a);tmp2=log(c);
        double ans1=b*tmp1;
        double ans2=d*tmp2;
        if(fabs(ans1-ans2)<eps) printf("=\n");
        else if(ans1>ans2) printf(">\n");
        else printf("<\n");
    }
    return 0;
}

 

以上是关于hdu 5170 精度控制的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1047 [Integer Inquiry] 高精度 格式

HDU1864 最大报销额 01背包

cout输出控制——位数和精度控制

java,中双精度double控制保留两位小数,js控制两位小数

Python关于Python里面小数点精度控制的问题

扩展el-input 加一个控制精度的命令