Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 배열 원소들의 곱에서 첫 번째 자리 숫자 구하는 방법

이 글에서는 주어진 배열의 모든 원소를 곱한 값에서 첫 번째 자리 숫자(가장 앞자리 숫자)를 구하는 프로그램을 살펴보겠습니다.

예를 들어, 다음과 같은 배열이 주어졌다고 가정해 봅시다.

arr = {12, 5, 16}

배열의 원소들을 모두 곱하면 12 × 5 × 16 = 960이 됩니다. 따라서 곱의 결과인 960에서 첫 번째 자리 숫자는 9입니다.

알고리즘 접근 방식

이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.

1단계: 반복문을 사용해 배열의 모든 원소를 하나씩 곱하여 전체 곱(prod)을 계산합니다.
2단계: 계산된 곱이 10보다 작아질 때까지 10으로 계속 나눕니다. 그러면 가장 앞자리 숫자만 남게 되며, 그 값이 바로 구하고자 하는 첫 번째 자리 숫자입니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
int calc_1digit(int arr[], int x) {
    long long int prod = 1;
    for(int i = 0;i < x; i++) {
        prod = prod*arr[i];
    }
    while (prod >= 10)
        prod = prod / 10;
    return prod;
}
int main() {
    int arr[]={12,43,32,54};
    cout <<"The first digit will be: " << calc_1digit(arr,4)<< endl;
}

실행 결과

The first digit will be: 8

코드 설명

calc_1digit 함수는 배열과 배열의 크기를 매개변수로 받습니다. 먼저 prod 변수를 1로 초기화한 뒤, for 반복문을 통해 배열의 각 원소를 차례대로 곱합니다. 곱셈 결과가 매우 커질 수 있으므로 오버플로우를 방지하기 위해 long long int 타입을 사용하는 것이 좋습니다.

곱이 완성되면 while 반복문으로 곱이 10 미만이 될 때까지 10으로 나눕니다. 예를 들어 위 코드에서 곱은 12 × 43 × 32 × 54 = 891,648이며, 89164 → 8916 → 891 → 89 → 8의 과정을 거쳐 최종적으로 첫 번째 자리 숫자인 8이 반환됩니다.