ホームページ  >  記事  >  バックエンド開発  >  以下を中国語に翻訳します。 C++ 数値を 2 つの割り切れる部分に分割します。

以下を中国語に翻訳します。 C++ 数値を 2 つの割り切れる部分に分割します。

PHPz
PHPz転載
2023-08-30 17:33:031090ブラウズ

将以下内容翻译为中文:C++ 将一个数分成两个可被整除的部分

この質問では、数値として解釈できる文字列が与えられています。次に、この文字列を 2 つの部分に分割し、最初の部分が A で割り切れ、2 番目の部分が B (2 つの整数が与えられた場合) で割り切れるようにする必要があります。例: -

Input : str = "123", a = 12, b = 3
Output : YES
12 3
"12" is divisible by a and "3" is
divisible by b.

Input : str = "1200", a = 4, b = 3
Output : YES
12 00

Input : str = "125", a = 12, b = 3
Output : NO

さて、この問題では、プログラムを高速化するために事前計算を行い、より高い制約の下でも動作できるようにします。

解決策を見つける方法

この方法では、文字列内で 2 つのループを実行します。最初のループは先頭から末尾まで、2 番目のループは末尾から先頭までです。ここで、各ポイントで、最初のループの an と 2 番目のループの b によって形成される整数を法として計算し、答えを見つけることができます。

#include <bits/stdc++.h>
using namespace std;
void divisionOfString(string &str, int a, int b){
    int n = str.length();
    vector<int> mod_a(n+1, 0); //
    mod_a[0] = (str[0] - &#39;0&#39;)%a;
    for (int i=1; i<n; i++) // front loop for calculating the mod of integer with a
        mod_a[i] = ((mod_a[i-1]*10)%a + (str[i]-&#39;0&#39;))%a;
    vector<int> mod_b(n+1, 0);
    mod_b[n-1] = (str[n-1] - &#39;0&#39;)%b;
    int power10 = 10; // as we have assigned answer to last index
    for (int i= n-2; i>=0; i--){ // end loop for calculating the mod of integer with b
        mod_b[i] = (mod_b[i+1] + (str[i]-&#39;0&#39;)*power10)%b;
        power10 = (power10 * 10) % b;
    }
    for (int i=0; i<n-1; i++){ // finding the division point
        if (mod_a[i] != 0) // we can skip through all the positions where mod_a is not zero
            continue;
        if (mod_b[i+1] == 0){ // now if the next index of mod_b is also zero so that is our division point
            cout << "YES\n";
            /*******Printing the partitions formed**********/
            for (int k=0; k<=i; k++)
               cout << str[k];
            cout << " ";
            for (int k=i+1; k < n; k++)
               cout << str[k];
            return;
        }
    }
    cout << "NO\n"; // else we print NO
}
// Driver code
int main(){
    string str = "123"; // given string
    int a = 12, b = 3;
    divisionOfString(str, a, b);
    return 0;
}

出力

YES
12 3

上記コードの説明

このメソッドでは、各除算によって形成された数値の余りを計算します。最初の数値は a で割り切れる必要があるため、順方向ループを実行し、その数値の mod を a に格納します。 b については、逆方向ループを実行し、mod を保存します。任意の位置の an の mod が 0 で、次のインデックスでの b の mod が 0 であれば、これが答えになることがわかっているため、それを出力します。 。

結論

このチュートリアルでは、数値を 2 つの割り切れる部分に分割する問題を解決しました。また、この問題に対する C プログラムと、それを解決するための完全な方法 (一般的) も学びました。同じプログラムを C、Java、Python などの他の言語で書くことができます。このチュートリアルがお役に立てば幸いです。

以上が以下を中国語に翻訳します。 C++ 数値を 2 つの割り切れる部分に分割します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。