In dieser Frage erhalten wir ein Array von ganzen Zahlen. Wir müssen alle Elemente zu einer Ganzzahl kombinieren und prüfen, ob es sich um eine Harshad-Zahl handelt.
Bevor wir mit der Lösung fortfahren, informieren Sie uns über die Harshad-Nummer. Alle Zahlen sind Harshad-Zahlen, die durch die Summe ihrer Zahlen teilbar sind. Beispielsweise ist 12 Harshads Zahl, da 12 durch 3 teilbar ist, was der Summe von 1+2 entspricht.
Um dieses Problem zu lösen, können wir alle Array-Elemente hinzufügen und dann prüfen, ob das Ergebnis eine Harshad-Zahl ist.
Problemstellung – Wir erhalten ein Array von ganzen Zahlen. Wir müssen alle Elemente zu einer Zahl kombinieren und prüfen, ob die kombinierte Zahl eine Harshad-Zahl ist.
Eingabe – arr = {1, 35, 69, 60};
Ausgabe-ja
Erklärung – Die resultierende Zahl 1356960 ist durch ihre Summe teilbar.
Eingabe – arr = {1, 65, 78, 1}
Ausgabe – Nein
Erklärung – Die Gesamtzahl 165781 ist nicht durch 28 teilbar.
Eingabe – arr = {1, 44}
Ausgabe-ja
Erklärung——144 ist durch 9 teilbar.
Diese Methode kombiniert alle Array-Elemente in einem String. Anschließend verwenden wir die Methode stoi(), um die kombinierten Zeichenfolgen in Ganzzahlen umzuwandeln. Anschließend können wir mit dem Modulo-Operator prüfen, ob eine Zahl durch die Summe ihrer Ziffern teilbar ist.
Definieren Sie eine „kombinierte“ String-Variable und initialisieren Sie sie mit einem leeren String.
Iterieren Sie über ein Array von Ganzzahlen. Konvertieren Sie eine Zahl mit der Methode to_string() in eine Zeichenfolge. Hängen Sie es anschließend an die Variable „combined“ an.
Definieren Sie die Variable „sum“ und initialisieren Sie sie auf Null, um die Summe der Zahlen zu speichern.
Durchlaufen Sie die kombinierte Zeichenfolge und speichern Sie die Summe jeder Zahl.
Konvertieren Sie die kombinierten Zeichenfolgen mit der Methode stoi() in Ganzzahlen. Anschließend wird die Ganzzahl modulo genommen und basierend auf dem Ergebnis ein boolescher Wert zurückgegeben.
#include <iostream> #include <vector> using namespace std; // function to check whether the number formed by concatenating the elements of the array is a Harshad number or not bool isHarshadNumber(vector<int> array){ // store the concatenated number string combined = ""; // Iterate over the array for (auto num : array){ // Concatenate the string combined += to_string(num); } // Stores the sum of digits int sum = 0; // Calculate sum of digits for (int i = 0; i < combined.length(); i++) sum += (combined[i] - '0'); // Check if n is divisible by the sum return stoi(combined) % sum == 0; } int main(){ // Input vector<int> arr{1, 35, 69, 60}; if (isHarshadNumber(arr)) cout << "Yes, the number formed by concatenating the array element is a Harshad number"; else cout << "No, the number formed by concatenating the array element is not a Harshad number"; return 0; }
Yes, the number formed by concatenating the array element is a Harshad number
Zeitkomplexität – O(N), da wir über die Zeichenfolge iterieren.
Raumkomplexität – O(1), da wir keinen zusätzlichen Raum verbrauchen.
Bei dieser Methode führen wir die Modulo-Operation für jeden kleinen Block der kombinierten Ganzzahl durch und prüfen, ob die große Ganzzahl durch ihre Summe teilbar ist.
Definieren Sie „kombinierte“ String-Variablen.
Durchlaufen Sie das Integer-Array und speichern Sie alle Integer-Kombinationen in der Variablen „combined“.
Speichern Sie die Summe der Zahlen in der Variablen „sum“
Verwenden Sie eine Schleife, um über „kombinierte“ Zeichenfolgen zu iterieren.
Definieren Sie die Variable „aktuell“ und initialisieren Sie sie auf Null
Multiplizieren Sie die Variable „aktuell“ mit 10 und addieren Sie den aktuellen numerischen Wert. Speichern Sie dann den resultierenden Wert in der Variablen „aktuell“.
Führen Sie eine Modulo-Operation für „Strom“ und „Summe“ durch.
Wenn alle Iterationen der Schleife abgeschlossen sind, wird „true“ zurückgegeben, wenn der Wert der „aktuellen“ Variablen Null ist. Gibt false zurück, wenn der Wert der aktuellen Variablen ungleich Null ist.
#include <iostream> #include <vector> using namespace std; // function to check whether the number formed by concatenating the elements of the array is a Harshad number or not bool isHarshadNumber(vector<int> array){ // store the concatenated number string combined = ""; // Iterate over the array for (auto num : array){ // Concatenate the string combined += to_string(num); } // Stores the sum of digits int sum = 0; // Calculate the sum of digits for (int i = 0; i < combined.length(); i++) sum += (combined[i] - '0'); // to store the current integer int current = 0; for (int i = 0; i < combined.size(); i++) { // Calculate the current integer by multiplying 10 and adding the current digit current = current * 10 + (combined[i] - '0'); // Check if the current integer is divisible by the sum current %= sum; } return current == 0; } int main(){ // Input vector<int> arr{1, 35, 69, 0}; if (isHarshadNumber(arr)) cout << "Yes, the number formed by concatenating the array element is a Harshad number"; else cout << "No, the number formed by concatenating the array element is not a Harshad number"; return 0; }
No, the number formed by concatenating the array element is not a Harshad number
Zeitkomplexität – O(N)
Raumkomplexität – O(1)
Wir haben zwei verschiedene Möglichkeiten kennengelernt, das Problem zu lösen. Die erste Methode wird nur verwendet, wenn das Array weniger Elemente enthält, da die Methode stoi() einige Einschränkungen bei der Konvertierung von Zeichenfolgen in Ganzzahlen aufweist. Die zweite Methode ist allgemein und kann für N Array-Elemente verwendet werden.
Das obige ist der detaillierte Inhalt vonÜberprüft, ob die durch die Verkettung von Array-Elementen gebildete Zahl eine gehashte Zahl ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!