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

โปรแกรม C++ หาผลหารและเศษของตัวเลขขนาดใหญ่

กำหนดสตริงของตัวเลขขนาดใหญ่ 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)
  ประกาศ vector vec
  ตั้งค่า 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