Heim > Artikel > Backend-Entwicklung > Übersetzen Sie Folgendes ins Chinesische: C++ Teilen Sie eine Zahl in zwei teilbare Teile
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.
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.
#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] - '0')%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]-'0'))%a; vector<int> mod_b(n+1, 0); mod_b[n-1] = (str[n-1] - '0')%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]-'0')*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
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 .
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!