数字比较(牛客网周练)

数字比较

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

题目描述

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

由此,他想出了一种十分奇妙的数字比较方法,给出两个数字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 }


猜你喜欢

转载自www.cnblogs.com/theshorekind/p/12919522.html
今日推荐