English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

برنامج C++ للتعامل مع الأرقام الكبيرة

لدينا رقم كبير، مثل num، ورقم كبير آخر، m. المهمة هي استخدام عملية التقسيم لطباعة المعدل، واستخدام المودول لطباعة الباقي من الرقم الكبير.

الناتج يجب أن يكون Remainder = xxx; المعدل = yyy

افترض أن لدينا إدخال num = 字برة num = " 14598499948265358486"، وأيضاً إدخال آخر m = 487، فإن الباقي هو 430، والقسمة هي 29976385930729688.

مثال

الإدخال: num = "214755974562154868"
   m = 17
الإخراج: الباقي = 15
   quotient = 12632704386009109
الإدخال: num = "214"
   m = 5
الإخراج: الباقي = 4
   Quotient = 42

الطريقة التي سنستخدمها لحل المشكلة المقدمة-

  • في البداية، ضع mod = 0.

  • من اليمين، يجب علينا استخدام mod لتحديد ذلك: mod = (mod * 10 + digit) % m.

  • البحث عن القسمة باستخدام quo [i] = mod / m، حيث i هو رقم الموقع للقسمة.

الخوارزمية

البداية
   خطوة 1 -> الإعلان عن long long ll
   خطوة 2 -> في الوظيفة void quotientremainder(string num, ll m)
      الإعلان عن vector<int> 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
      الخروج من الحلقة
      اطبع قيمة الباقي التي هي في mod
      ضبط zeroflag = 0
      التحرك في For i = 0 و i < vec.size() و i++
         إذا كان vec[i] == 0 && zeroflag == 0 ثم
            التجاوز
         الخروج من If
         zeroflag = 1
         اطبع القيمة التي تحتويها vec[i]
      الخروج من For
      الرجوع
   خطوة 3 -> في الوظيفة int main()  Declare و assign num = "14598499948265358486"
      تقرير وتعيين ll m = 487
      إتصال بالدالة quotientremainder(num, m)
توقف

مثال

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//دالة حساب المودول
void quotientremainder(string num, ll m) {
   //للحفاظ على المودول الكبير
   vector<int> vec;
   ll mod = 0;
   //تقسيم خطوة بخطوة
   for (int i = 0; i < num.size(); i++) {
      int digit = num[i] - '0';
      //تحديث المودول
      //رقم الحالي
      mod = mod * 10 + digit;
      //تحديث المقدار
      int quo = mod / m;
      vec.push_back(quo);
      //تحديث mod للدور التالي
      mod = mod % m;
   }
   cout << "\nالباقي: " << mod << "\n";
   cout << "Quotient: ";
   //مؤشر لاستبدال الصفر في البداية
   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;
}

الناتج

الباقي: 430
الناتج: 29976385930729688
من المحتمل أن تفضل