다음 C++ 코드를 Java로 변환해 주세요. 소수 검사를 위해 Java의 BigInteger 클래스를 사용하여 C++의 isPrime 함수에 상응하는 함수를 구현하세요.
#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;}
응답
C++ 코드는 큰 숫자 내에서 소수 자릿수를 효율적으로 검사합니다. 이를 Java로 변환하려면 잠재적으로 매우 큰 숫자를 처리하기 위해 데이터 유형을 신중하게 고려해야 합니다. 이 용도로 BigInteger를 사용합니다. 다음은 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();}}
변환 프로세스 설명:
헤더 및 네임스페이스: C++ #include 지시어는 Java import 문으로 변경됩니다. Java에서는 using namespace std;가 필요하지 않습니다. 명시적으로 정규화된 이름을 사용합니다(예: BigInteger.valueOf(2)).
데이터 유형: 중요한 변화는 Java에서 long long를 변경하기 위해 BigInteger를 사용한다는 것입니다. 이렇게 하면 C++ 코드의 대용량 입력 처리 기능을 반영하여 오버플로 문제 없이 임의의 큰 숫자를 처리할 수 있습니다.
isPrime 함수:isPrime 함수의 로직은 대부분 그대로 유지됩니다. 주요 차이점은 다음과 같습니다.