Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
C++-Code in Java konvertieren und dabei die Funktionalität beibehalten
Sie können ein Modell direkt abfragen und die zurückgegebenen Ergebnisse testen, wenn Sie verschiedene Parameterwerte mit der Cloud Console oder durch direkten Aufruf der Vertex AI API verwenden.
Sie sind ein erfahrener Programmierer mit Kenntnissen in Java und C++ und haben sich auf die Codeübersetzung zwischen diesen beiden Sprachen spezialisiert. Sie erläutern Ihren Conversion-Prozess und achten darauf, dass der übersetzte Code dem Original entspricht, sofern nicht anders angegeben.
Konvertiere den folgenden C++-Code in Java. Implementiere das Äquivalent der isPrime-Funktion von C++ mit der BigInteger-Klasse von Java für die Primzahlprüfung.
#include <iostream>#include <string>#include <cmath>usingnamespacestd;boolisPrime(longlongnumber){if(number<=1)returnfalse;if(number==2)returntrue;if(number%2==0)returnfalse;for(longlongi=3;i<=sqrt(number);i+=2){if(number%i==0)returnfalse;}returntrue;}intmain(){stringlargeNumber;cout << "Enter a large number: ";cin >> largeNumber;intprimeSubstringCount=0;for(size_ti=0;i < largeNumber.length();++i){for(size_tj=i+1;j<=largeNumber.length();++j){stringsubstring=largeNumber.substr(i,j-i);longlongnumber=stoll(substring);if(isPrime(number)){primeSubstringCount++;cout << "Prime substring: " << substring << endl;}}}cout << "Total number of prime substrings: " << primeSubstringCount << endl;return0;}
Antwort
Der C++-Code sucht effizient nach Primzahlunterstrings in einer großen Zahl. Bei der Übersetzung in Java müssen die Datentypen sorgfältig ausgewählt werden, um potenziell sehr große Zahlen zu verarbeiten. Wir verwenden dazu BigInteger. Hier ist das Java-Äquivalent:
importjava.math.BigInteger;importjava.util.Scanner;publicclassPrimeSubstrings{publicstaticbooleanisPrime(BigIntegernumber){if(number.compareTo(BigInteger.ONE)<=0)returnfalse;if(number.equals(BigInteger.valueOf(2)))returntrue;if(number.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO))returnfalse;for(BigIntegeri=BigInteger.valueOf(3);i.compareTo(number.sqrt())<=0;i=i.add(BigInteger.valueOf(2))){if(number.mod(i).equals(BigInteger.ZERO))returnfalse;}returntrue;}publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("Enter a large number: ");StringlargeNumber=scanner.nextLine();intprimeSubstringCount=0;for(inti=0;i < largeNumber.length();++i){for(intj=i+1;j<=largeNumber.length();++j){Stringsubstring=largeNumber.substring(i,j);BigIntegernumber=newBigInteger(substring);if(isPrime(number)){primeSubstringCount++;System.out.println("Prime substring: " << substring);}}}System.out.println("Total number of prime substrings: "+primeSubstringCount);scanner.close();}}
Erläuterung des Conversion-Prozesses
Header und Namespaces: Die C++-#include-Direktive wird durch die Java-import-Anweisung ersetzt. Der using namespace std; ist in Java nicht erforderlich. Wir verwenden explizit die vollständig qualifizierten Namen (z. B. BigInteger.valueOf(2).
Datentypen: Die entscheidende Änderung besteht darin, dass BigInteger in Java anstelle von long long verwendet wird. So können wir beliebig große Zahlen ohne Überlaufprobleme verarbeiten, was der Fähigkeit des C++-Codes entspricht, große Eingaben zu verarbeiten.
isPrime-Funktion: Die Logik der Funktion isPrime bleibt weitgehend erhalten. Die hauptsächlichen Unterschiede lauten:
Vergleiche: Anstelle von <=, == und % verwenden wir die Methoden compareTo(), equals() und mod() der Klasse BigInteger.
Quadratwurzel: Mit number.sqrt() wird die Quadratwurzel der Obergrenze der Schleife effizient berechnet.
String-Manipulation:substr in C++ entspricht direkt substring in Java.
Eingabe/Ausgabe: cout und cin in C++ werden durch die Klassen System.out.print und Scanner in Java ersetzt. Denken Sie daran, den Scanner zu schließen, um Ressourcen freizugeben.
Fehlerbehandlung: Der Java-Code behandelt implizit mögliche NumberFormatException, wenn der Eingabestring keine gültige Zahl ist. Bei Bedarf kann eine robustere Fehlerbehandlung hinzugefügt werden.
Dieser Java-Code bietet eine funktional äquivalente Lösung für den angegebenen C++-Code und verarbeitet große Zahlen effektiv mit BigInteger. Der Kernalgorithmus bleibt unverändert, damit die Übersetzung der ursprünglichen Absicht entspricht.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2024-12-05 (UTC)."],[],[]]