กำหนดสตริงของตัวเลขขนาดใหญ่ num และอีกตัวเลขขนาดใหญ่ m งานคือพิมพ์ผลหารจากการหาร และเศษของตัวเลขขนาดใหญ่จากการหา modulus
รูปแบบเอาต์พุทควรเป็น: Remainder = xxx; Quotient = yyy
สมมติเรามีอินพุต num = "14598499948265358486" และ m = 487 เศษจะเป็น 430 และผลหารจะเป็น 29976385930729688
ตัวอย่าง
Input: num = "214755974562154868", m = 17 Output: Remainder = 15, quotient = 12632704386009109 Input: num = "214", m = 5 Output: Remainder = 4, Quotient = 42
วิธีการที่เราจะใช้แก้ปัญหา −
- ตั้งค่า mod เริ่มต้นเป็น 0
- เริ่มจากด้านขวา หา mod โดยใช้: mod = (mod * 10 + digit) % m
- หาผลหารโดย quo[i] = mod/m โดยที่ i คือตำแหน่งของผลหาร
อัลกอริทึม
Start Step 1 → ประกาศ long long ll Step 2 → ในฟังก์ชัน void quotientremainder(string num, ll m) ประกาศ vectorvec ตั้งค่า ll mod = 0 ลูป For i = 0 และ i < num.size() และ i++ ตั้งค่า digit = num[i] - '0' ตั้งค่า mod = mod * 10 + digit ตั้งค่า quo = mod / m เรียก vec.push_back(quo) ตั้งค่า mod = mod % m End loop พิมพ์ค่าเศษซึ่งอยู่ใน mod ตั้งค่า zeroflag = 0 ลูป For i = 0 และ i < vec.size() และ i++ If vec[i] == 0 && zeroflag == 0 แล้ว Continue End If zeroflag = 1 พิมพ์ค่า vec[i] End For Return Step 3 → ในฟังก์ชัน int main() ประกาศและกำหนด num = "14598499948265358486" ประกาศและกำหนด ll m = 487 เรียกฟังก์ชัน quotientremainder(num, m) Stop
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// ฟังก์ชันคำนวณ modulus ของตัวเลขขนาดใหญ่
void quotientremainder(string num, ll m) {
// เก็บ modulus ของตัวเลขขนาดใหญ่
vector<int> vec;
ll mod = 0;
// หารทีละขั้นตอน
for (int i = 0; i < num.size(); i++) {
int digit = num[i] - '0';
// อัปเดต modulo โดยต่อ digit ปัจจุบัน
mod = mod * 10 + digit;
// อัปเดตผลหาร
int quo = mod / m;
vec.push_back(quo);
// อัปเดต mod สำหรับรอบถัดไป
mod = mod % m;
}
cout << "\nRemainder : " << mod << "\n";
cout << "Quotient : ";
// Flag ใช้ลบศูนย์นำหน้า
bool zeroflag = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == 0 && zeroflag == 0)
continue;
zeroflag = 1;
cout << vec[i];
}
return;
}
// บล็อกหลัก
int main() {
string num = "14598499948265358486";
ll m = 487;
quotientremainder(num, m);
return 0;
}
ผลลัพธ์
Remainder : 430 Quotient : 29976385930729688