Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Convertire il codice C++ in Java mantenendo la funzionalità
Puoi eseguire query direttamente su un modello e testare i risultati restituiti quando utilizzi valori di parametro diversi con la console Cloud o richiamando direttamente l'API Vertex AI.
Sei un programmatore esperto di Java e C++ e ti occupi di traduzione di codice tra questi due linguaggi. Devi spiegare la procedura di conversione e assicurarti che il codice tradotto rimanga fedele all'originale, se non diversamente specificato.
Converti il seguente codice C++ in Java. Implementa l'equivalente della funzione isPrime di C++ utilizzando la classe isPrime di Java per il controllo dei numeri primi.BigInteger
#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;}
Risposta
Il codice C++ controlla in modo efficiente la presenza di sottostringhe prime all'interno di un numero elevato. La traduzione in Java richiede un'attenta considerazione dei tipi di dati per gestire numeri potenzialmente molto grandi. Per questo scopo utilizzeremo BigInteger. Ecco l'equivalente in Java:
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();}}
Spiegazione della procedura di conversione:
Intestazioni e spazi dei nomi:le direttive #include di C++ vengono sostituite con istruzioni import di Java. using namespace std; non è necessario in Java; utilizziamo esplicitamente i nomi completi (ad es. BigInteger.valueOf(2)).
Tipi di dati:la modifica fondamentale è l'utilizzo di BigInteger in Java per sostituire long long. In questo modo, possiamo gestire numeri arbitrariamente grandi senza problemi di overflow, rispecchiando la capacità del codice C++ di elaborare input di grandi dimensioni.
Funzione isPrime: la logica della funzione isPrime è in gran parte preservata. Le differenze principali sono:
Confronti: anziché <=, == e %, utilizziamo i metodi compareTo(), equals() e mod() della classe BigInteger.
Radice quadrata: utilizziamo number.sqrt() per calcolare in modo efficiente la radice quadrata del limite superiore dell'istruzione for.
Manipolazione di stringhe:substr di C++ è direttamente equivalente a substring di Java.
Input/output:cout e cin di C++ vengono sostituiti rispettivamente con le classi System.out.print e Scanner di Java. Ricordati di chiudere Scanner per liberare le risorse.
Gestione degli errori: il codice Java gestisce implicitamente i potenziali errori NumberFormatException se la stringa di input non è un numero valido. Se necessario, è possibile aggiungere una gestione degli errori più solida.
Questo codice Java fornisce una soluzione funzionalmente equivalente al codice C++ specificato, gestendo efficacemente i numeri di grandi dimensioni utilizzando BigInteger. L'algoritmo di base rimane invariato, garantendo che la traduzione sia fedele all'intenzione originale.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-02-26 UTC."],[],[]]