C++程序 比较 m^n 和 n^m
给定两个正整数 m 和 n ,编写一个程序来检查 m^n 是否大于、小于或等于 n^m。
示例:
输入:m = 3,n = 10
输出:m^n > n^m
解释:3^10=59049,大于 10^3=1000
输入:m = 987654321,n = 123456987
输出:m^n < n^m
一种 愚笨的方法 是计算 m^n 和 n^m,但当 m 和 n 很大时,会导致溢出。
一种 高效的方法 是使用 对数 来解决这个问题。
给定 LHS = m^n 和 RHS = n^m。
同时在两侧取对数,LHS = n*log(m),RHS = m*log(n)
。
然后比较 LHS 和 RHS。
//用CPP编写的程序,用于比较哪个更大
//m^n或n^m
#include<bits/stdc++.h>
using namespace std;
//用于比较m^n和n^m的函数
void check(unsigned long long m,unsigned long long int n)
{
// m^n
double RHS=m*(double)log(n);
// n^m
double LHS=n*(double)log(m);
if(LHS>RHS)
cout<<"m^n>n^m";
else if(LHS<RHS)
cout<<"m^n<n^m";
else
cout<<"m^n=n^m";
}
//主函数
int main()
{
unsigned long long m = 987654321, n = 123456987;
//比较m^n和n^m的函数调用
check(m, n);
return 0;
}
//用Java编写的程序,用于比较哪个更大
//m^n或n^m
import java .io.*;
class GFG
{
//用于比较m^n和n^m的函数
static void check(long m,long n)
{
// m^n
double RHS=m*(double)Math.log(n);
// n^m
double LHS=n*(double)Math.log(m);
if(LHS>RHS)
System.out.print("m^n>n^m");
else if(LHS<RHS)
System.out.print("m^n<n^m");
else
System.out.print("m^n=n^m");
}
//主函数
static public void main (String[] args)
{
long m=987654321,n=123456987;
//比较m^n和n^m的函数调用
check(m,n);
}
}
//此代码由anuj_67提供。
#使用Python3编写的程序,用于比较哪个更大
#m^n或n^m
import math
#用于比较m^n和n^m的函数
def check(m,n):
# m^n
RHS=m*math.log(n);
# n^m
LHS=n*math.log(m);
if(LHS>RHS):
print("m^n>n^m");
elif(LHS<RHS):
print("m^n<n^m");
else:
print("m^n=n^m");
#主函数
m=987654321;
n=123456987;
#比较m^n和n^m的函数调用
check(m,n);
#此代码由mits提供。
// C#程序比较m^n和n^m哪个更大
using System;
class GFG
{
static void check(ulong m, ulong n)
{
// m^n
double RHS = m * (double)Math.Log(n);
// n^m
double LHS = n * (double)Math.Log(m);
if (LHS > RHS)
Console.Write("m^n > n^m");
else if (LHS < RHS)
Console.Write("m^n < n^m");
else
Console.Write("m^n = n^m");
}
static public void Main ()
{
ulong m = 987654321, n = 123456987;
check(m, n);
}
}
输出:
m^n < n^m
时间复杂度: O(max(log(m), log(n)))
辅助空间: O(max(log(m), log(n))),因为有递归的调用栈。