给定两个整数,则说a和b。将a除以b后不使用乘法,除法和mod运算符。
例子:
Input: a = 10, b = 3
Output: 3
Input: a = 43, b = -8
Output: -5
这个问题已经在这里讨论过了。在这篇文章中,讨论了一种不同的方法。
方法 :
- 令a / b = c。
- 记录双方
- log(a)– log(b)= log(c)
- 现在,RHS的日志可以在LHS中写为exp
- 最终公式为: exp(log(a)– log(b))= c
C++
// C++ program for above approach
#include
using namespace std;
// Returns the quotient of dividend/divisor.
void Divide(int a, int b)
{
long long dividend = (long long)a;
long long divisor = (long long)b;
// Calculate sign of divisor i.e.,
// sign will be negative only if
// either one of them is negative
// otherwise it will be positive
long long sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
// Remove signs of dividend and divisor
dividend = abs(dividend);
divisor = abs(divisor);
// Zero division Exception.
if (divisor == 0) {
cout << "Cannot Divide by 0" << endl;
return;
}
if (dividend == 0) {
cout << a << " / " << b << " is equal to : "
<< 0 << endl;
return;
}
if (divisor == 1) {
cout << a << " / " << b << " is equal to : "
<< sign * dividend << endl;
return;
}
// Using Formula derived above.
cout << a << " / " << b << " is equal to : "
<< sign * exp(log(dividend) - log(divisor))
<< endl;
}
// Drivers code
int main()
{
int a = 10, b = 5;
Divide(a, b);
a = 49, b = -7;
Divide(a, b);
return 0;
}
Java
// Java program for
// above approach
import java.io.*;
class GFG
{
static void Divide(int a, int b)
{
long dividend = (long)a;
long divisor = (long)b;
// Calculate sign of divisor i.e.,
// sign will be negative only if
// either one of them is negative
// otherwise it will be positive
long sign = (dividend < 0) ^
(divisor < 0) ? -1 : 1;
// Remove signs of
// dividend and divisor
dividend = Math.abs(dividend);
divisor = Math.abs(divisor);
// Zero division Exception.
if (divisor == 0)
{
System.out.println("Cannot Divide by 0");
return;
}
if (dividend == 0)
{
System.out.println(a + " / " + b +
" is equal to : " + 0);
return;
}
if (divisor == 1)
{
System.out.println(a + " / " + b +
" is equal to : " +
sign * dividend);
return;
}
// Using Formula
// derived above.
System.out.println(a + " / " + b + " is equal to : " +
Math.floor(sign *
(Math.exp(Math.log(dividend) -
Math.log(divisor)))));
}
// Driver code
public static void main (String[] args)
{
int a = 10, b = 5;
Divide(a, b);
a = 49; b = -7;
Divide(a, b);
}
}
// This code is contributed
// by shiv_bhakt.
Python3
# Python3 program
# for above approach
import math
def Divide(a, b):
dividend = a;
divisor = b;
# Calculate sign of divisor
# i.e., sign will be negative
# only if either one of them
# is negative otherwise it
# will be positive
sign = -1 if ((dividend < 0) ^
(divisor < 0)) else 1;
# Remove signs of
# dividend and divisor
dividend = abs(dividend);
divisor = abs(divisor);
# Zero division Exception.
if (divisor == 0):
print("Cannot Divide by 0");
if (dividend == 0):
print(a, "/", b, "is equal to :", 0);
if (divisor == 1):
print(a, "/", b, "is equal to :",
(sign * dividend));
# Using Formula
# derived above.
print(a, "/", b, "is equal to :",
math.floor(sign * math.exp(math.log(dividend) -
math.log(divisor))));
# Driver code
a = 10;
b = 5;
Divide(a, b);
a = 49;
b = -7;
Divide(a, b);
# This code is contributed
# by mits
C#
// C# program for
// above approach
using System;
class GFG
{
static void Divide(int a, int b)
{
long dividend = (long)a;
long divisor = (long)b;
// Calculate sign of divisor
// i.e., sign will be negative
// only if either one of them
// is negative otherwise it
// will be positive
long sign = (dividend < 0) ^
(divisor < 0) ? -1 : 1;
// Remove signs of
// dividend and divisor
dividend = Math.Abs(dividend);
divisor = Math.Abs(divisor);
// Zero division Exception.
if (divisor == 0)
{
Console.WriteLine("Cannot Divide by 0");
return;
}
if (dividend == 0)
{
Console.WriteLine(a + " / " + b +
" is equal to : " + 0);
return;
}
if (divisor == 1)
{
Console.WriteLine(a + " / " + b +
" is equal to : " +
sign * dividend);
return;
}
// Using Formula
// derived above.
Console.WriteLine(a + " / " + b + " is equal to : " +
Math.Floor(sign *
(Math.Exp(Math.Log(dividend) -
Math.Log(divisor)))));
}
// Driver code
public static void Main ()
{
int a = 10, b = 5;
Divide(a, b);
a = 49; b = -7;
Divide(a, b);
}
}
// This code is contributed
// by shiv_bhakt.
PHP
Javascript
输出:
10 / 5 is equal to : 2
49 / -7 is equal to : -7