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

商和大数的C ++程序

Data un numero molto grande, ad esempio num, un altro numero molto grande, m. L'obiettivo è utilizzare l'operazione di divisione per stampare il quoziente, e utilizzare il modulo per stampare il resto di un numero grande.

L'output dovrebbe essere Remainder = xxx; Quoziente = yyy

Supponiamo di avere un input num = stringa num = " 14598499948265358486", mentre altri input m = 487, allora il residuo è 430 e il quoziente è 29976385930729688.

示例

Input: num = "214755974562154868"
   m = 17
Output: Residuo = 15
   quotient = 12632704386009109
Input: num = "214"
   m = 5
Output: Residuo = 4
   Quoziente = 42

Il metodo che useremo per risolvere il problema dato-

  • Inizialmente impostare mod = 0.

  • Dalla destra, dobbiamo utilizzare mod per trovarlo: mod = (mod * 10 + digit) % m.

  • Trova il quoziente con quo[i] = mod / m, dove i è il numero di posizione del quoziente.

Algoritmo

Inizia
   Passo 1 -> Dichiarare long long ll
   Passo 2 -> Nella funzione void quotientremainder(string num, ll m)
      Dichiarare un vettore int vec
      Imposta ll mod = 0
      Ciclo For i = 0 e i < num.size() e i++
         Imposta digit = num[i] - '0'
         Imposta mod = mod * 10 + digit
         Imposta quo = mod / m
         Chiamata vec.push_back(quo)
         Imposta mod = mod % m
      Fine ciclo
      Stampa il valore residuo che è in mod
      Imposta zeroflag = 0
      Ciclo For i = 0 e i < vec.size() e i++
         Se vec[i] == 0 e zeroflag == 0 allora,
            Continua
         Fine If
         zeroflag = 1
         Stampa il valore di vec[i]
      Fine For
      Ritorna
   Passo 3 -> Nella funzione int main() Dichiarare ed assegnare num = "14598499948265358486"
      Declare and assign ll m = 487
      Call function quotientremainder(num, m)
Stop

示例

#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 << "\nRemainder: " << 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;
}

输出结果

Remainder: 430
Quotient: 29976385930729688