배열의 모든 요소를 곱한 뒤 이를 특정 숫자 n으로 나눈 나머지를 구해야 하는 경우가 종종 있습니다. 배열의 크기가 크거나 요소 값이 클 때 전체 곱을 먼저 계산하면 오버플로우가 발생할 수 있으므로, 각 단계마다 나머지 연산을 적용하는 것이 효율적입니다. 아래는 이를 구현한 Java 코드입니다.
예제
import java.util.*;
import java.lang.*;
public class Demo{
public static int remainder(int my_arr[], int arr_len, int val){
int mul_val = 1;
for (int i = 0; i < arr_len; i++)
mul_val = (mul_val * (my_arr[i] % val)) % val;
return mul_val % val;
}
public static void main(String argc[]){
int[] my_arr = new int []{ 35, 100, 69, 99, 27, 88, 12, 25 };
int arr_len = 8;
int val = 11;
System.out.println("배열의 곱을 11로 나눈 나머지는 다음과 같습니다");
System.out.println(remainder(my_arr, arr_len, val));
}
}출력
배열의 곱을 11로 나눈 나머지는 다음과 같습니다 0
코드 설명
Demo라는 이름의 클래스에는 'remainder'라는 정적(static) 메서드가 포함되어 있습니다. 이 메서드는 정수 배열을 처음부터 끝까지 순회하면서 각 요소를 지정된 값(val)으로 나눈 나머지를 누적 곱에 반영합니다. 반복문 안에서 매번 나머지 연산을 수행하기 때문에 중간 결과값이 지나치게 커지는 것을 막아 오버플로우를 효과적으로 방지할 수 있습니다. 최종적으로 전체 곱을 해당 값으로 나눈 나머지를 반환합니다.
main 메서드에서는 나눌 기준이 되는 값(val)이 정의되고, 정수 배열과 배열의 길이가 함께 설정됩니다. 이후 정수 배열, 배열 길이, 나눌 값을 매개변수로 전달하여 remainder 메서드를 호출하며, 계산된 결과와 함께 안내 메시지가 콘솔에 출력됩니다.
위 예제에서 배열 {35, 100, 69, 99, 27, 88, 12, 25}의 곱을 11로 나눈 나머지는 0입니다. 즉, 배열 요소들의 곱은 11로 완전히 나누어떨어집니다.