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

นับตัวเลขในแฟคทอเรียลใน C++


เราได้รับค่าจำนวนเต็มและภารกิจคือการคำนวณแฟกทอเรียลของตัวเลขก่อนแล้วจึงคำนวณจำนวนหลักในผลลัพธ์

จำนวนแฟกทอเรียลคืออะไร

แฟกทอเรียลของตัวเลขคำนวณโดยการคูณตัวเลขในตัวเลขโดยลดค่าของหลักลง 1 ซึ่งแสดงด้วยสัญลักษณ์ '!' เช่น 0!, 1!, 2!, 3!, 5!,... . ฯลฯ แฟกทอเรียลของ 0! และ 1! เป็น 1. เสมอ

I.e. factorial of 2 = 2 * (2-1) = 2 * 1 = 2
      factorial of 3 = 3 * (3-1) * (2-1) = 3 * 2 * 1 = 6

ตัวอย่าง

Input − factorial(6)
Output − number of digits in factorial(6) is: 3

คำอธิบาย − เนื่องจากค่าแฟกทอเรียลของ 6 คือ 720 และมี 3 หลัก ดังนั้นผลลัพธ์จึงเป็น 3

Input − factorial(12)
Output− number of digits in factorial(12) is: 9

คำอธิบาย − เนื่องจากค่าแฟกทอเรียลของ 12 คือ 479001600 และมีตัวเลข 9 หลัก ผลลัพธ์จึงเป็น 9

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

  • ป้อนจำนวนที่ต้องการคำนวณแฟกทอเรียล

  • หากตัวเลขน้อยกว่า 0 ให้คืนค่า 0 เนื่องจากตัวเลขติดลบไม่มีค่าใด ๆ ของแฟคทอเรียล

  • หากตัวเลขคือ 1 ให้ส่งคืน 1 เพราะ 1! เป็น 1 และมี 1 หลัก

  • หากตัวเลขมากกว่า 1 คือ เริ่มต้นด้วย 2 หรือมากกว่า ให้สร้างหนึ่งวง เริ่มตั้งแต่ 2 จนถึงน้อยกว่าหรือเท่ากับตัวเลข

  • ใช้ตัวแปรชั่วคราวตัวหนึ่ง สมมุติว่า d และเริ่มต้นมันด้วย 0 นอกลูป และในลูปให้เพิ่มมันเข้าไปด้วยค่าของ log10(i) จนกระทั่งทุกๆ การวนซ้ำของ i

  • หลังจากนั้น คืนค่าพื้นของ 'floor(d)+1'

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <iostream>
#include <cmath>
using namespace std;
// This function returns the number of digits present in num!
int count_digits(int num){
   // factorial exists only if num <= 0
   if (num < 0){
      return 0;
   }
   // base case
   if (num <= 1){
      return 1;
   }
   // else iterate through num and calculate the
   // value
   double d = 0;
   for (int i=2; i<=num; i++){
      d += log10(i);
   }
   return floor(d) + 1;
}
int main(){
   cout<<"number of digits in factorial(1) is: "<<count_digits(1)<< endl;
   cout<<"number of digits in factorial(6) is: "<<count_digits(6) << endl;
   cout<<"number of digits in factorial(106) is: "<<count_digits(106) << endl;
   return 0;
}

ผลลัพธ์

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

number of digits in factorial(1) is: 1
number of digits in factorial(6) is: 3
number of digits in factorial(106) is: 171