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

ค้นหาจำนวนศูนย์ต่อท้ายในฐาน 16 แทน N! ใช้ C++


ในบทความนี้ เราจะเข้าใจปัญหาในการค้นหาเลขศูนย์ต่อท้ายของตัวเลขที่ระบุ N ในการแทนค่าแฟกทอเรียลในฐาน 16 เป็นต้น

Input : N = 7
Output : 1
Explanation : fact(7) = 5040 in base10 and 13B0 in base16 having 1 trailing zero.

Input : N = 11
Output : 2
Explanation : fact(11) = 39916800 in base10 and 2611500 in base16 having 2 trailing zeroes.

เรามาสรุปขั้นตอนการแปลงเลขฐานสิบจากฐานหนึ่งเป็นฐานอื่นกันก่อน มาดูตัวอย่างการแปลง (5040)10 เป็น (?)16

ค้นหาจำนวนศูนย์ต่อท้ายในฐาน 16 แทน N! ใช้ C++

คือ หารเลขด้วย 16 แล้วเหลือเศษไว้จนหารเลขไม่ได้อีก ผลลัพธ์จะเป็นส่วนที่เหลือในลำดับที่กลับกัน

เป็นผลให้เรามีศูนย์ต่อท้ายหนึ่งตัว และศูนย์ต่อท้ายนี้เราได้เมื่อ 16 หารตัวเลขด้วยเศษ 0

การแยกตัวประกอบเฉพาะของ 5040 =161 * 451* 71 ซึ่งหมายถึง 16 หาร 5040 1 ครั้งด้วยเศษ 0 เท่ากับศูนย์ตามหลัง ด้วยวิธีนี้ เราสามารถคำนวณจำนวนศูนย์ต่อท้ายได้

แนวทางในการหาทางออก

เราได้กล่าวถึงวิธีการหาจำนวนศูนย์ต่อท้าย เรายังรู้ 16 =24 ซึ่งหมายความว่ากำลังสูงสุด 2 ใน N หารด้วยสี่จะเท่ากับกำลังสูงสุดของ 16 ซึ่งเรียกอีกอย่างว่าสูตรของ Legendre

โค้ด C++ สำหรับแนวทางด้านบน

นี่คือไวยากรณ์ C++ ที่เราสามารถใช้เป็นอินพุตเพื่อแก้ปัญหาที่กำหนดได้ -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

int main () {
   int n = 11;
   long long int count = 0;
   long long int value, power = 2;
   long long int result;

   do{
      value = n / power;
      count += value;
      power *= 2;
   }
   while (value != 0);

   // Count has the highest power of 2
   result = count / 4;
   cout << "Number of trailing zeroes in base 16 representation of N : " << result;
}

ผลลัพธ์

Number of trailing zeroes in base 16 representation of N: 2

คำอธิบายของโค้ดด้านบน

  • เรากำลังเริ่มต้นกำลังด้วยสองกำลังเนื่องจากเราต้องคำนวณกำลังสูงสุด 2
  • การนำสูตรของ Legendre ไปใช้ในชั่วขณะหนึ่ง โดยที่เราหาร n ด้วยกำลัง ซึ่งเท่ากับ 2 ในตอนแรก และนับเพิ่มขึ้นด้วยค่าและกำลังด้วย 2
  • หลังจากแบ่งกำลังสูงสุดของ 2 กับ 4 ซึ่งเก็บไว้ในตัวแปรการนับ
  • ในที่สุดเราก็พิมพ์ผลออกมาได้

บทสรุป

ในบทความนี้ เราแก้ปัญหาการหาจำนวนเลขศูนย์ต่อท้ายในการแทนค่าแฟกทอเรียล N ฐาน 16 ซึ่งเราแก้โดยใช้สูตรของ Legendre เรายังเขียนโค้ด C++ เพื่อแก้ปัญหาเดียวกัน คุณสามารถเขียนโค้ดนี้ในภาษาอื่นๆ เช่น Java, C, python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์