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

หาเศษจากการหารโดยไม่ใช้ Modulo Operator ใน C++

ปัญหา

กำหนดตัวเลข N และ D หาเศษจากการหาร N / D ห้ามใช้ตัวดำเนินการ % (modulo)

ตัวอย่าง: N = 53, D = 3 → เศษ = 2

วิธีแก้ปัญหา

วิธีที่ 1: หาตัวคูณที่ใกล้ที่สุด (Iterative)

หา i ที่น้อยที่สุดที่ทำให้ D * i ≥ N แล้วเศษ = N - D * (i-1)

int findRem(int N, int D) {
    int i;
    for (i = 0; ; i++) {
        if (D * i >= N) break;
    }
    return N - (D * (i - 1));
}

วิธีที่ 2: ใช้ Integer Division (แนะนำ)

ใน C++ การหารจำนวนเต็ม N / D จะทิ้งเศษทิ้งให้อัตโนมัติ (Truncation toward zero)

int findRem(int N, int D) {
    int Q = N / D;      // ผลหาร (Quotient)
    int R = N - D * Q;  // เศษ = Dividend - Divisor × Quotient
    return R;
}

วิธีที่ 3: ลบซ้ำ (Repeated Subtraction) - สำหรับการศึกษา


int findRem(int N, int D) {
    while (N >= D) {
        N -= D;
    }
    return N;
}

โค้ดตัวอย่างครบ (วิธีที่ 2)

#include <iostream>
using namespace std;

int findRem(int N, int D) {
    int Q = N / D;
    int R = N - (D * Q);
    return R;
}

int main() {
    int N = 45, D = 6;
    cout << "The remainder after dividing " << N 
         << " by " << D << " is " << findRem(N, D);
    return 0;
}

Output

The remainder after dividing 45 by 6 is 3

ความซับซ้อน

วิธีTimeSpaceหมายเหตุ
Iterative MultiplicationO(N/D)O(1)ช้า ถ้า N ใหญ่ D เล็ก
Integer DivisionO(1)O(1)เร็วที่สุด แนะนำใช้
Repeated SubtractionO(N/D)O(1)ช้ามาก

Input / Output

Input:  N = 53, D = 3
Output: 2