C++程序 比较 m^n 和 n^m

C++程序 比较 m^n 和 n^m

给定两个正整数 mn ,编写一个程序来检查 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))),因为有递归的调用栈。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例