Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนเลขศูนย์ต่อท้ายในผลิตภัณฑ์ของอาร์เรย์ใน C++


เราได้รับอาร์เรย์ Arr[] ของจำนวนเต็มบวกขนาด N เป้าหมายคือการนับจำนวนศูนย์ต่อท้ายที่มีอยู่ในผลคูณขององค์ประกอบทั้งหมดของอาร์เรย์

เราจะทำได้โดยการนับตัวประกอบของตัวเลขแต่ละตัว เราจะนับ 2 และ 5 เป็นปัจจัยของแต่ละตัวเลขเนื่องจากผลคูณของ 2 และ 5 คือ 10 ซึ่งให้ 1 ต่อท้าย 0 ในที่สุดแล้วแต่จำนวนใดที่น้อยกว่าจะนับศูนย์ต่อท้ายในผลิตภัณฑ์ ถ้าเรามี 4 2 และ 6 5 แล้ว จะมี 4 ศูนย์ต่อท้ายในผลิตภัณฑ์ − 2*2*2*2*5*5*5*5*5*5=250000

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล

Arr[] = { 2, 5, 10, 15, 20, 25, 100 }

ผลผลิต

Number of trailing zeroes : 6

คำอธิบาย

Factors 2 and 5 of each element of Arr[]:
Arr[0] = 2 : 2 twos=1, fives=0
Arr[1] = 5 : 5 twos=1, fives=1
Arr[2] = 10 : 2*5 twos=2, fives=2
Arr[3] = 15 : 3*5 twos=2, fives=3
Arr[4] = 20 : 2*2*5 twos=4, fives=4
Arr[5] = 25 : 5*5 twos=4, fives=6
Arr[6] = 100 : 2*2*5*5 twos=6, fives=8
Count of 2 is less so trailing zeroes will be 6.

ป้อนข้อมูล

Arr[] = { 10,10,10,10,10 }

ผลผลิต

Number of trailing zeroes : 5

คำอธิบาย

Factors 2 and 5 of each element of Arr[]:
Arr[0] = 10 : 2*5 twos=1, fives=1
Arr[1] = 10 : 2*5 twos=2, fives=2
Arr[2] = 10 : 2*5 twos=3, fives=3
Arr[3] = 10 : 3*5 twos=4, fives=4
Arr[4] = 10 : 2*5 twos=5, fives=5
Count of 2 and 5 is equal so trailing zeroes will be 5.

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้อาร์เรย์ของจำนวนเต็มบวกที่มีความยาว N..

  • ฟังก์ชัน trailZeros(int arr[],int n) รับอาร์เรย์และ n เป็นอินพุตและส่งกลับจำนวนศูนย์ต่อท้ายในผลคูณขององค์ประกอบทั้งหมด

  • ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับจำนวนศูนย์

  • นำตัวแปร 2 ตัว 2 และ 5 มานับเป็น 2 และ 5 เป็นตัวประกอบ

  • Traverse array ใช้ for วนซ้ำ

  • สำหรับแต่ละองค์ประกอบหากหารด้วย 2 หรือ 5 ลงตัว ให้เพิ่มสองและห้าและลดด้วย 2 หรือ 5

  • ในตอนท้ายของ for loop ตรวจสอบค่าของ twos และ fives แล้วแต่จำนวนใดจะน้อยกว่า

  • เริ่มต้นการนับด้วยค่าที่ต่ำกว่าของทั้งสอง

  • คืนค่าการนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h<
using namespace std;
int trailZeros(int arr[],int n){
   int count = 0;
   int twos = 0;
   int fives = 0;
   for (int i = 0; i < n; i++){
      while(arr[i]%2==0 || arr[i]%5==0){
         if(arr[i]%2==0){
            arr[i]=arr[i]/2;
            twos++;
         }
         if(arr[i]%5==0){
            arr[i]=arr[i]/5;
            fives++;
         }
      }
   }
   count=twos<fives?twos:fives;
   return count;
}
int main(){
   int Arr[]={ 12, 5 , 15, 8, 100, 40 };
   int Length= sizeof(Arr)/sizeof(Arr[0]);
   cout <<endl<< "Number of trailing zeroes : "<<trailZeros(Arr,Length);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Number of trailing zeroes : 5