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

แฟกทอเรียลต่อท้ายศูนย์ใน C++


ในที่นี้เราจะมาดูวิธีการคำนวณจำนวน 0 ต่อท้ายสำหรับผลลัพธ์แฟกทอเรียลของจำนวนใดๆ ดังนั้นถ้า n =5 แล้ว 5! =120. มีเพียง 0 ต่อท้ายเท่านั้น สำหรับ 20! มันจะเป็น 4 ศูนย์เป็น 20! =2432902008176640000

วิธีที่ง่ายที่สุดคือการคำนวณแฟคทอเรียลและนับ 0 แต่วิธีนี้ใช้ไม่ได้ผลสำหรับค่า n จำนวนมาก ดังนั้นเราจะปฏิบัติตามแนวทางอื่น เลขศูนย์ต่อท้ายจะอยู่ที่นั่นหากตัวประกอบเฉพาะคือ 2 และ 5 หากเรานับ 2s และ 5s เราก็จะได้ผลลัพธ์ เราจะปฏิบัติตามกฎนี้

ต่อท้าย 0s =การนับ 5s ในตัวประกอบเฉพาะของแฟคทอเรียล(n)

ดังนั้น 0s ต่อท้าย =$$\lvert\frac{n}{5}\rvert+\lvert\frac{n}{25}\rvert+\lvert\frac{n}{125}\rvert+...$$

เพื่อแก้ปัญหานี้ เราต้องทำตามขั้นตอนเหล่านี้ -

  • กำหนดจำนวน =0
  • สำหรับ i =5, (n/i)> 1, อัปเดต i =i * 5, ทำ
    • นับ =นับ + (n /i)
  • จำนวนคืน

ตัวอย่าง (C++)

#include <iostream>
#include <cmath>
#define MAX 20
using namespace std;
int countTrailingZeros(int n) {
   int count = 0;
   for (int i = 5; n / i >= 1; i *= 5)
      count += n / i;
   return count;
}
main() {
   int n = 20;
   cout << "Number of trailing zeros: " << countTrailingZeros(n);
}

อินพุต

Number of trailing zeroes: 20

ผลลัพธ์

Number of trailing zeros: 4