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

商と大きな数のC ++プログラム

非常に大きな数字、例えばnum、もう一つの非常に大きな数字、mが与えられた場合、m。タスクは除法演算を使用して商を出力し、模数を使用して大きな数字の余数を出力することです。

出力はRemainder = xxx; 商= yyy

私たちはnum =文字列num =“ 14598499948265358486”,そして他の入力m = 487、それでは余数が430、商が29976385930729688。

入力: num = “214755974562154868”
   m = 17
出力: Remainder = 15
   quotient = 12632704386009109
入力: num =“214”
   m = 5
出力: Remainder = 4
   Quotient = 42

私たちがその問題を解決するために使用する方法-

  • 最初にmodを0に設定します。

  • 右から始めて、modを使用してそれを見つける必要があります:mod equals (mod * 10 + digit)mod m。

  • quo[i] equals mod / mが商を探し、iが商の場所番号です。

アルゴリズム

スタート
   ステップ 1 -> long long llを宣言する
   ステップ 2 -> ファンクション void quotientremainder(string num, ll m)
      vector<int> vecを宣言する
      ll mod equals 0
      ループ フォー イー equals 0 そして イー 小于 numのサイズ そして イー++
         digit equals num[i] - '0'
         mod equals mod * 10 + 桁
         quo equals mod / m
         vec.push_back(quo)を呼び出す
         mod equals mod mod m
      ループ エンド
      modに含まれる残り値を出力する
      ゼロフラグ equals 0
      ループ フォー イー equals 0 そして イー 小于 vecのサイズ そして イー++
         If vec[i] == 0 && zeroflag == 0 then,
            次に進む
         Ifの終わり
         zeroflag = 1
         vec[i]の値を出力
      Forの終わり
      リターン
   ステップ 3 -> 函数 int main() 内で宣言し割り当てる 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 = mod * 10 + 桁;
      //商を更新
      int quo = mod / m;
      vec.push_back(quo);
      //modを次の反復に更新
      mod = mod % m;
   }
   cout << "\n余数:" << mod << "\n"
   cout << "商:"
   //先頭のゼロを削除するためのフラグ
   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
基本チュートリアル