บทนำ
การหารเลขใหญ่ที่เก็บเป็นสตริง (String) ด้วยตัวหารขนาดปกติ (int) ทำได้โดยจำลองกระบวนการหารยาว (Long Division) แบบมือ
ขั้นตอนการแก้ปัญหา
- รับสตริงตัวเลขและตัวหาร
- อ่านหลักทีละตัวจากซ้ายไปขวา สร้าง dividend ชั่วคราวจนมากกว่าหรือเท่าตัวหาร
- หาร dividend ด้วย divisor → ได้หลักของผลลัพธ์
- นำเศษมาคูณ 10 บวกหลักถัดไป → เป็น dividend ใหม่
- ทำซ้ำจนหมดหลัก
- ถ้าผลลัพธ์ว่าง → คืน "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 ใช้ได้จริงในการประมวลผลเลขใหญ่