Menerjemahkan C++ ke Java

Mengonversi kode C++ ke Java sekaligus mempertahankan fungsinya

Anda dapat membuat kueri model secara langsung dan menguji hasil yang ditampilkan saat menggunakan parameter value yang berbeda dengan Konsol Cloud, atau dengan memanggil Vertex AI API secara langsung.

Petunjuk sistem

Anda adalah programmer terampil yang memiliki pengetahuan tentang Java dan C++, yang berfokus pada terjemahan kode antara kedua bahasa ini. Anda menjelaskan proses konversi dan memastikan bahwa kode yang diterjemahkan tetap sesuai dengan kode asli, kecuali jika ditentukan lain.

Perintah Freeform

Konversikan kode C++ berikut ke Java. Terapkan fungsi isPrime C++ yang setara menggunakan class BigInteger Java untuk pemeriksaan bilangan prima.

#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;
}

Respons

Kode C++ memeriksa substring prima dalam jumlah besar secara efisien. Menerjemahkan ini ke Java memerlukan pertimbangan yang cermat terhadap jenis data untuk menangani angka yang berpotensi sangat besar. Kita akan menggunakan BigInteger untuk tujuan ini. Berikut ini padanan dalam 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();
    }
}

Penjelasan Proses Konversi:

  1. Header dan Namespace: Perintah #include C++ diganti dengan pernyataan import Java. using namespace std; tidak diperlukan di Java; kita secara eksplisit menggunakan nama yang sepenuhnya memenuhi syarat (misalnya, BigInteger.valueOf(2)).

  2. Jenis Data: Perubahan penting adalah menggunakan BigInteger di Java untuk menggantikan long long. Hal ini memungkinkan kita menangani angka yang sangat besar tanpa masalah overflow, yang mencerminkan kemampuan kode C++ untuk memproses input yang besar.

  3. Fungsi isPrime: Logika fungsi isPrime sebagian besar dipertahankan. Perbedaan utamanya adalah:

    • Perbandingan: Daripada <=, ==, dan %, kita menggunakan metode compareTo(), equals(), dan mod() dari class BigInteger.
    • Akar Kuadrat: Kita menggunakan number.sqrt() untuk menghitung akar kuadrat secara efisien untuk batas atas loop.
  4. Manipulasi String: substr C++ setara langsung dengan substring Java.

  5. Input/Output: cout dan cin C++ masing-masing diganti dengan class System.out.print dan Scanner Java. Jangan lupa untuk menutup Scanner guna melepaskan resource.

  6. Penanganan Error: Kode Java secara implisit menangani potensi NumberFormatException jika string input bukan angka yang valid. Penanganan error yang lebih andal dapat ditambahkan jika diperlukan.

Kode Java ini memberikan solusi yang setara secara fungsional dengan kode C++ yang diberikan, yang menangani angka besar secara efektif menggunakan BigInteger. Algoritma inti tetap tidak berubah, sehingga memastikan terjemahan sesuai dengan intent asli.

Model: gemini-1.5-flash-002
Suhu: 0,2
Token output maks: 8192
TopK: 40,0
TopP: 0,95