Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หารสองจำนวนเต็มใน C++


สมมติว่าเรามีตัวหารและตัวหารจำนวนเต็มสองตัว เราต้องหารจำนวนเต็มสองจำนวนโดยไม่ใช้ตัวดำเนินการการคูณ การหาร และตัวดัดแปลง คืนผลหารหลังจากหารเงินปันผลด้วยตัวหาร การหารจำนวนเต็มควรตัดให้เหลือศูนย์ อินพุตทั้งสองเป็นจำนวนเต็ม

ดังนั้นหากอินพุตที่กำหนดเป็นเงินปันผล =7 ตัวหาร =-3 ผลลัพธ์จะเป็น -2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ใช้สองอาร์กิวเมนต์ x และ y แสดงว่า x หาร y
  • ถ้า x <-Infinity และ y =1 แล้วคืนค่าอนันต์
  • a :=|x|, b :=|y| และคำตอบ :=0
  • ในขณะที่ a – b>=0
    • p :=0
    • ในขณะที่ a – (เลื่อนซ้าย b (เลื่อนซ้าย 1 p ครั้ง))>=0
      • p :=p + 1
    • a :=a – (เลื่อนซ้าย b, p ครั้ง)
    • ans :=ans + เลื่อนซ้าย 1 p ครั้ง
  • ถ้า x> 0 เป็นจริงและ y> 0 เป็นจริงด้วย ให้คืนค่า ans ไม่เช่นนั้นให้คืนค่า (– ans)

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น −

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int divide(int l, int y) {
      if(l <= INT_MIN && y == -1)return INT_MAX;
      lli a = labs(l);
      lli b = labs(y);
      lli ans = 0;
      while(a-b >= 0){
         int x = 0;
         while(a-(b << 1 << x) >= 0){
            x++;
         }
         a -= b<<x;
         ans += 1<<x;
      }
      return (l>0)== (y>0)?ans:-ans;
   }
};
main(){
   Solution ob;
   cout << ob.divide(40, 3);
}

อินพุต

40
3

ผลลัพธ์

13