zoukankan      html  css  js  c++  java
  • 数字比较(牛客网周练)

    数字比较

    链接:https://ac.nowcoder.com/acm/contest/5713/E
    来源:牛客网

    题目描述

    牛牛很喜欢对数字进行比较,但是对于3 > 2这种非常睿智的比较不感兴趣。上了高中之后,学习了数字的幂,他十分喜欢这种数字表示方法,比如xy

    由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出">",小于则输出"<",等于则输出"="。

    输入描述:

    两个数字x和y。

    满足1 <= x,y <= 109

    输出描述:

    一个字符,">","<"或者"="。
    示例1

    输入

    2 2

    输出

    =
    示例2

    输入

    2 4

    输出

    =

    很明显,题目的题意不难理解,但是给的数据太大了,让快速幂直接比较无处可解。
    比较大小的话,可以用除法,但还是得算出幂来。
    想来想去,比较的问题还可以借用数学中的对数来比较,这可是很有特性的,在数学课上练了不知多少遍,居然没怎么想起来。
    先来看一下对数ans=logax的特性,当x=1时,ans=0;当a>1,x>1时,ans>0;当a>1,0<x<1时,ans<0.
    假设对数以10为底。
    lg(x/y)=lgx-lgy;
    而lgxa=a*lgx;
    所以lgxy=y*lgx ; lgyx=x*lgy ;
    如果xy/yx>1的,说明前者大于后者,
    如果xy/yx<1的,说明前者小于后者;
    如果xy/yx=1,说明两者相等。
    而lg(xy/yx)=y*lgx-x*lgy;
    比较两者只需要看差是否小于0(前小于后),大于0,等于0即可。
    注意开double

    代码如下:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 using namespace std;
     5 int main()
     6 {
     7     int x,y;
     8     cin>>x>>y;
     9     double c1=(double)y*log(x);
    10     double c2=(double)x*log(y);
    11     double res=c1-c2;
    12     if(res>0)
    13     printf(">");
    14     else if(res<0)
    15     printf("<");
    16     else
    17     printf("=");
    18     return 0;
    19 }


  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/theshorekind/p/12919522.html
Copyright © 2011-2022 走看看