Heim  >  Artikel  >  Backend-Entwicklung  >  Übersetzen Sie Folgendes ins Chinesische: C++ Teilen Sie eine Zahl in zwei teilbare Teile

Übersetzen Sie Folgendes ins Chinesische: C++ Teilen Sie eine Zahl in zwei teilbare Teile

PHPz
PHPznach vorne
2023-08-30 17:33:031091Durchsuche

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

In dieser Frage erhalten wir eine Zeichenfolge, die als Zahl interpretiert werden kann. Jetzt müssen wir diese Zeichenfolge in zwei Teile teilen, sodass der erste Teil durch A und der zweite Teil durch B teilbar ist (vorausgesetzt, wir haben zwei ganze Zahlen). Zum Beispiel -

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

Bei diesem Problem werden wir nun einige Vorberechnungen durchführen, um unser Programm schneller zu machen, damit es dann unter höheren Einschränkungen arbeiten kann.

Methode zum Finden der Lösung

Bei dieser Methode führen wir zwei Schleifen in der Zeichenfolge aus, die erste Schleife vom Anfang bis zum Ende und die zweite Schleife vom Ende bis zum Anfang. Nun nehmen wir an jedem Punkt Modulo die ganze Zahl, die durch an in der ersten Schleife und b in der zweiten Schleife gebildet wird, und können dann die Antwort finden.

Beispiel

#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;
}

Ausgabe

YES
12 3

Erklärung des obigen Codes

Bei dieser Methode berechnen wir nun den Rest der durch jede Division gebildeten Zahl. Unsere erste Zahl sollte durch a teilbar sein, also führen wir eine Vorwärtsschleife durch und speichern den Mod dieser Zahl mit a. Für b führen wir eine Rückwärtsschleife aus und speichern den Mod jetzt, da wir wissen, dass dies unsere Antwort sein wird, wenn der Mod von a an einer beliebigen Position Null ist und der Mod von b am nächsten Index Null ist .

Fazit

In diesem Tutorial haben wir das Problem gelöst, eine Zahl in zwei teilbare Teile zu teilen. Wir haben auch das C++-Programm für dieses Problem und die vollständige (generische) Methode zu seiner Lösung gelernt. Wir können das gleiche Programm in anderen Sprachen wie C, Java, Python und anderen schreiben. Wir hoffen, dass Sie dieses Tutorial hilfreich fanden.

Das obige ist der detaillierte Inhalt vonÜbersetzen Sie Folgendes ins Chinesische: C++ Teilen Sie eine Zahl in zwei teilbare Teile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen