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

หารเลขใหญ่ในรูปสตริงด้วยตัวเลขใน C++

บทนำ

การหารเลขใหญ่ที่เก็บเป็นสตริง (String) ด้วยตัวหารขนาดปกติ (int) ทำได้โดยจำลองกระบวนการหารยาว (Long Division) แบบมือ

ขั้นตอนการแก้ปัญหา

  1. รับสตริงตัวเลขและตัวหาร
  2. อ่านหลักทีละตัวจากซ้ายไปขวา สร้าง dividend ชั่วคราวจนมากกว่าหรือเท่าตัวหาร
  3. หาร dividend ด้วย divisor → ได้หลักของผลลัพธ์
  4. นำเศษมาคูณ 10 บวกหลักถัดไป → เป็น dividend ใหม่
  5. ทำซ้ำจนหมดหลัก
  6. ถ้าผลลัพธ์ว่าง → คืน "0"

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

string divideLargeNumber(string number, int divisor) {
    string result;
    int index = 0;
    int dividend = number[index] - '0';
    while (dividend < divisor) {
        dividend = dividend * 10 + (number[++index] - '0');
    }
    while (number.size() > index) {
        result += (dividend / divisor) + '0';
        dividend = (dividend % divisor) * 10 + number[++index] - '0';
    }
    if (result.length() == 0) {
        return "0";
    }
    return result;
}

int main() {
    string large_number = "12345678901234567890";
    int divisor = 75;
    cout << divideLargeNumber(large_number, divisor) << endl;
    return 0;
}

ผลลัพธ์

164609052016460905

คำอธิบาย

12345678901234567890 ÷ 75 = 164609052016460905 เหลือเศษ 15

ข้อจำกัด

ตัวหารต้องอยู่ในขอบเขต int (ประมาณ ±2×10⁹) หากตัวหารก็ใหญ่ ต้องใช้ BigInteger library หรือ implement เอง

สรุป

เทคนิค Long Division บนสตริง เป็นพื้นฐานของ Big Integer Arithmetic ใช้ได้จริงในการประมวลผลเลขใหญ่