Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Converter código C++ em Java, preservando a funcionalidade
É possível consultar um modelo diretamente e testar os resultados retornados ao usar
diferentes valores de parâmetros com o console do Cloud ou chamando a
API Vertex AI diretamente.
Você é um programador experiente que conhece Java e C++ e se concentra na tradução de código entre essas duas linguagens. Você explica seu processo de conversão e garante que o código traduzido permaneça fiel ao original, a menos que especificado de outra forma.
Converta o seguinte código C++ em Java. Implemente o equivalente da função isPrime do C++ usando a classe BigInteger do Java para verificação de números primos.
#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;}
Resposta
O código C++ verifica de maneira eficiente se há substrings primos em um número grande. A tradução para Java exige uma consideração cuidadosa dos tipos de dados para processar números potencialmente muito grandes. Vamos usar BigInteger para essa finalidade. Confira o equivalente em 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();}}
Explicação do processo de conversão:
Cabeçalhos e namespaces: as diretivas #include do C++ são substituídas por instruções import do Java. O using namespace std; não é necessário no Java. Usamos explicitamente os nomes totalmente qualificados (por exemplo, BigInteger.valueOf(2)).
Tipos de dados: a mudança crucial é usar BigInteger em Java para substituir long long. Isso nos permite processar números arbitrariamente grandes sem problemas de estouro, refletindo a capacidade do código C++ de processar entradas grandes.
Função isPrime: a lógica da função isPrime é amplamente preservada. As principais diferenças são:
Comparações: em vez de <=, == e %, usamos os métodos compareTo(), equals() e mod() da classe BigInteger.
Raiz quadrada: usamos number.sqrt() para calcular de maneira eficiente a raiz quadrada do limite superior do loop.
Manipulação de string: o substr do C++ é diretamente equivalente ao substring do Java.
Entrada/saída: cout e cin do C++ são substituídos pela classe System.out.print e Scanner do Java, respectivamente. Lembre-se de fechar o Scanner para liberar recursos.
Tratamento de erros: o código Java processa implicitamente possíveis NumberFormatException se a string de entrada não for um número válido. Se necessário, é possível adicionar um tratamento de erros mais robusto.
Esse código Java oferece uma solução funcionalmente equivalente ao código C++ fornecido, processando números grandes de maneira eficaz usando BigInteger. O algoritmo principal permanece inalterado, garantindo que a tradução seja fiel à intenção original.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-04-17 UTC."],[],[]]