English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
非常に大きな数字、例えば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