📜  找到最接近a ^ b的x的倍数

📅  最后修改于: 2021-04-26 07:40:38             🧑  作者: Mango

给定三个整数abx ,任务是获得x的最接近a b的倍数。

例子:

方法:

  • 计算b并将其存储在变量num中
  • 然后,计算⌊num/x⌋并将其存储在变量floor中
  • 现在,左侧最接近的元素将是closetLeft = x * floor
  • 右边最接近的元素将是closetRight = x *(floor + 1)
  • 最后,其中最接近的数字将是min(num-最近的左,最近的正确-num)

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
#define ll long long int
  
// Function to return the multiple of x 
// which is closest to a^b
ll getClosest(int a, int b, int x)
{
    ll num = pow(a, b);
  
    int floor = num / x;
  
    // Closest element on the left
    ll numOnLeft = x * floor;
  
    // Closest element on the right
    ll numOnRight = x * (floor + 1);
  
    // If numOnLeft is closer than numOnRight
    if ((num - numOnLeft) < (numOnRight - num))
        return numOnLeft;
  
    // If numOnRight is the closest
    else
        return numOnRight;
}
  
// Driver code
int main()
{
    int a = 349, b = 1, x = 4;
    cout << getClosest(a, b, x) << endl;
    return 0;
}


Java
//Java implementation of the approach 
  
public class GFG {
  
// Function to return the multiple of x 
// which is closest to a^b 
    static long getClosest(int a, int b, int x) {
        long num = (long) Math.pow(a, b);
  
        int floor = (int) (num / x);
  
        // Closest element on the left 
        long numOnLeft = x * floor;
  
        // Closest element on the right 
        long numOnRight = x * (floor + 1);
  
        // If numOnLeft is closer than numOnRight 
        if ((num - numOnLeft) < (numOnRight - num)) {
            return numOnLeft;
        } // If numOnRight is the closest 
        else {
            return numOnRight;
        }
    }
  
    public static void main(String[] args) {
        int a = 349, b = 1, x = 4;
        System.out.println(getClosest(a, b, x));
  
    }
}


Python3
# Python3 implementation of the approach
  
# Function to return the multiple of x 
# which is closest to a^b
def getClosest(a, b, x) :
    num = pow(a, b)
  
    floor = num // x
  
    # Closest element on the left
    numOnLeft = x * floor
  
    # Closest element on the right
    numOnRight = x * (floor + 1)
  
    # If numOnLeft is closer than numOnRight
    if ((num - numOnLeft) < 
        (numOnRight - num)):
        return numOnLeft
  
    # If numOnRight is the closest
    else :
        return numOnRight
  
# Driver code
if __name__ == "__main__" :
      
    a, b, x = 349, 1, 4
    print(getClosest(a, b, x))
  
# This code is contributed by Ryuga


C#
// C# implementation of the approach
using System;
  
// #define ll long long int
  
class GFG
{
// Function to return the multiple of x 
// which is closest to a^b
static long getClosest(int a, int b, int x)
{
    int num = (int)Math.Pow(a, b);
  
    int floor = (int)(num / x);
  
    // Closest element on the left
    int numOnLeft = (int)(x * floor);
  
    // Closest element on the right
    int numOnRight = (int)(x * (floor + 1));
  
    // If numOnLeft is closer than numOnRight
    if ((num - numOnLeft) < (numOnRight - num))
        return numOnLeft;
  
    // If numOnRight is the closest
    else
        return numOnRight;
}
  
// Driver code
public static void Main()
{
    int a = 349, b = 1, x = 4;
    Console.WriteLine(getClosest(a, b, x));
}
}
  
// This code is contributed 
// by Akanksha Rai


PHP


输出:
348
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”