C++를 Java로 변환

기능을 유지하면서 C++ 코드를 Java로 변환

모델을 직접 쿼리하고 Cloud 콘솔에서 다른 매개변수 값을 사용하거나 Vertex AI API를 직접 호출하여 반환된 결과를 테스트할 수 있습니다.

시스템 안내

Java와 C++에 대한 풍부한 지식을 갖추고 있으며 이 두 언어 간의 코드 변환에 중점을 두고 있는 숙련된 프로그래머라고 가정해 보겠습니다. 변환 프로세스를 설명하고 달리 지정되지 않는 한 번역된 코드가 원본과 동일하게 유지하는 것이 프로그래머의 업무입니다.

자유 형식 프롬프트

다음 C++ 코드를 Java로 변환해 주세요. 소수 검사를 위해 Java의 BigInteger 클래스를 사용하여 C++의 isPrime 함수에 상응하는 함수를 구현하세요.

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

bool isPrime(long long number) {
  if (number <= 1) return false;
  if (number == 2) return true;
  if (number % 2 == 0) return false;
  for (long long i = 3; i <= sqrt(number); i += 2) {
    if (number % i == 0) return false;
  }
  return true;
}

int main() {
  string largeNumber;
  cout << "Enter a large number: ";
  cin >> largeNumber;

  int primeSubstringCount = 0;

  for (size_t i = 0; i < largeNumber.length(); ++i) {
    for (size_t j = i + 1; j <= largeNumber.length(); ++j) {
      string substring = largeNumber.substr(i, j - i);
      long long number = stoll(substring);

      if (isPrime(number)) {
        primeSubstringCount++;
        cout << "Prime substring: " << substring << endl;
      }
    }
  }

  cout << "Total number of prime substrings: " << primeSubstringCount << endl;

  return 0;
}

응답

C++ 코드는 큰 숫자 내에서 소수 자릿수를 효율적으로 검사합니다. 이를 Java로 변환하려면 잠재적으로 매우 큰 숫자를 처리하기 위해 데이터 유형을 신중하게 고려해야 합니다. 이 용도로 BigInteger를 사용합니다. 다음은 Java에 상응하는 코드입니다.

import java.math.BigInteger;
import java.util.Scanner;

public class PrimeSubstrings {

    public static boolean isPrime(BigInteger number) {
        if (number.compareTo(BigInteger.ONE) <= 0) return false;
        if (number.equals(BigInteger.valueOf(2))) return true;
        if (number.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO)) return false;
        for (BigInteger i = BigInteger.valueOf(3); i.compareTo(number.sqrt()) <= 0; i = i.add(BigInteger.valueOf(2))) {
            if (number.mod(i).equals(BigInteger.ZERO)) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a large number: ");
        String largeNumber = scanner.nextLine();

        int primeSubstringCount = 0;

        for (int i = 0; i < largeNumber.length(); ++i) {
            for (int j = i + 1; j <= largeNumber.length(); ++j) {
                String substring = largeNumber.substring(i, j);
                BigInteger number = new BigInteger(substring);

                if (isPrime(number)) {
                    primeSubstringCount++;
                    System.out.println("Prime substring: " << substring);
                }
            }
        }

        System.out.println("Total number of prime substrings: " + primeSubstringCount);
        scanner.close();
    }
}

변환 프로세스 설명:

  1. 헤더 및 네임스페이스: C++ #include 지시어는 Java import 문으로 변경됩니다. Java에서는 using namespace std;가 필요하지 않습니다. 명시적으로 정규화된 이름을 사용합니다(예: BigInteger.valueOf(2)).

  2. 데이터 유형: 중요한 변화는 Java에서 long long를 변경하기 위해 BigInteger를 사용한다는 것입니다. 이렇게 하면 C++ 코드의 대용량 입력 처리 기능을 반영하여 오버플로 문제 없이 임의의 큰 숫자를 처리할 수 있습니다.

  3. isPrime 함수: isPrime 함수의 로직은 대부분 그대로 유지됩니다. 주요 차이점은 다음과 같습니다.

    • 비교: <=, ==, % 대신 BigInteger 클래스의 compareTo(), equals(), mod() 메서드를 사용합니다.
    • 제곱근: number.sqrt()를 사용하여 루프의 상한값의 제곱근을 효율적으로 계산합니다.
  4. 문자열 조작: C++의 substr은 Java의 substring과 직접적으로 동일합니다.

  5. 입력/출력: C++의 coutcin은 각각 Java의 System.out.printScanner 클래스로 변경됩니다. 리소스를 해제하려면 Scanner를 닫아야 합니다.

  6. 오류 처리: Java 코드는 입력 문자열이 유효한 숫자가 아닌 경우 잠재적인 NumberFormatException을 암시적으로 처리합니다. 필요한 경우 더 강력한 오류 처리를 추가할 수 있습니다.

이 Java 코드는 주어진 C++ 코드와 기능적으로 동등한 솔루션을 제공하므로 BigInteger를 사용하여 큰 숫자를 효과적으로 처리합니다. 핵심 알고리즘은 변경되지 않으므로 번역이 원래 의도에 충실합니다.

모델: gemini-1.5-flash-002
강도: 0.2
최대 출력 토큰: 8192
최상위 K: 40.0
최상위 P: 0.95