Heim > Backend-Entwicklung > C++ > Überprüft, ob die durch die Verkettung von Array-Elementen gebildete Zahl eine gehashte Zahl ist

Überprüft, ob die durch die Verkettung von Array-Elementen gebildete Zahl eine gehashte Zahl ist

WBOY
Freigeben: 2023-08-25 20:17:06
nach vorne
826 Leute haben es durchsucht

Überprüft, ob die durch die Verkettung von Array-Elementen gebildete Zahl eine gehashte Zahl ist

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.

Beispiel

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.

Methode 1

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.

Algorithmus

  • 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.

Beispiel

#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;
}
Nach dem Login kopieren

Ausgabe

Yes, the number formed by concatenating the array element is a Harshad number
Nach dem Login kopieren

Zeitkomplexität – O(N), da wir über die Zeichenfolge iterieren.

Raumkomplexität – O(1), da wir keinen zusätzlichen Raum verbrauchen.

Methode 2

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.

Algorithmus

  • 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.

Beispiel

#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;
}
Nach dem Login kopieren

Ausgabe

No, the number formed by concatenating the array element is not a Harshad number
Nach dem Login kopieren

Zeitkomplexität – O(N)

Raumkomplexität – O(1)

Fazit

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage