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

การกู้คืนอัลกอริธึมกองสำหรับจำนวนเต็มที่ไม่ได้ลงนามใน C++


อภิปรายการหารจำนวนเต็มที่ไม่ได้ลงนามโดยใช้อัลกอริธึมการหาร อัลกอริธึมการแบ่งบางส่วนถูกนำไปใช้บนกระดาษ และอัลกอริธึมอื่นๆ ถูกนำไปใช้กับวงจรดิจิทัล อัลกอริธึมการหารมีสองประเภท:อัลกอริธึมการหารแบบช้าและอัลกอริธึมการหารแบบเร็ว อัลกอริทึมการแบ่งช้ารวมถึงการคืนค่า การกู้คืนที่ไม่มีประสิทธิภาพ SRT และอัลกอริทึมที่ไม่กู้คืน

ในบทช่วยสอนนี้ เราจะพูดถึงอัลกอริทึมการกู้คืน โดยสมมติว่า 0 <ตัวหาร <เงินปันผล

แนวทางในการหาแนวทางแก้ไข

ในที่นี้ เราจะใช้ register Q เพื่อเก็บผลหาร ลงทะเบียน A เพื่อเก็บส่วนที่เหลือ และ M เพื่อเก็บตัวหาร ค่าเริ่มต้นของ A จะถูกเก็บไว้ที่ 0 และค่าของมันจะกลับคืนมา ซึ่งเป็นสาเหตุที่วิธีนี้เป็นการคืนค่าการหาร

  • เริ่มต้นการลงทะเบียนด้วยค่า

    • Q =เงินปันผล

    • A =0,

    • M =ตัวหาร

    • N =จำนวนบิตของเงินปันผล

  • กะซ้าย AQ หมายถึงการลงทะเบียน A และ Q เป็นหน่วยเดียว

  • ลบ A ด้วย M และเก็บไว้ใน A

  • ตรวจสอบบิตที่สำคัญที่สุดของ A:

    • หากเป็น 0 ให้ตั้งค่าบิตที่มีนัยสำคัญน้อยที่สุดเป็น 1

    • มิฉะนั้น ตั้งค่าบิตที่มีนัยสำคัญน้อยที่สุดเป็น 0

  • คืนค่าของ A และลดค่าของตัวนับ N

  • ถ้า N =0 ให้ทำลายลูป มิฉะนั้น ให้ไปที่ขั้นตอนที่ 2

  • ผลหารถูกเก็บไว้ในรีจิสเตอร์ Q.

ผังงาน

การกู้คืนอัลกอริธึมกองสำหรับจำนวนเต็มที่ไม่ได้ลงนามใน C++

ตัวอย่าง

รหัส C++ สำหรับแนวทางข้างต้น

#include <iostream>
using namespace std;
int main(){
   // initializing all the variables with Dividend = 9, Divisor = 2.
   int Q = 8,q=1,M=3;
   short N = 4;
   int A = Q;
   M <<= N;
   // loop for division by bit operation.
   for(int i=N-1; i>=0; i--) {
      A = (A << 1)- M;
      // checking MSB of A.
      if(A < 0) {
         q &= ~(1 << i);  // set i-th bit to 0
         A = A + M;
      } else {
         q |= 1 << i;     // set i-th bit to 1
      }
   }
   cout << "Quotient: "<< q;
   return 0;
}

ผลลัพธ์

Quotient: 2

บทสรุป

ในบทช่วยสอนนี้ เราได้พูดถึงอัลกอริทึมการหารการกู้คืนสำหรับจำนวนเต็มที่ไม่ได้ลงนาม เราได้พูดคุยถึงแนวทางง่ายๆ ในการแก้ปัญหานี้โดยใช้ผังงานและการใช้การดำเนินการบิต เรายังพูดถึงโปรแกรม C++ สำหรับปัญหานี้ ซึ่งเราสามารถทำได้ด้วยภาษาโปรแกรม เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์