Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các chữ số trong một giai thừa trong C ++

Chúng ta được cung cấp một giá trị số nguyên và nhiệm vụ đầu tiên là tính giai thừa của một số và sau đó tính tổng số chữ số trong một kết quả.

Số giai thừa là gì

Giai thừa của một số được tính bằng cách nhân các chữ số trong một số trong khi giảm giá trị của chữ số đó đi 1. Nó được ký hiệu bằng ký hiệu '!' Tức là 0 !, 1 !, 2 !, 3 !, 5!, ... .,vân vân. Giai thừa của 0! và 1! luôn luôn là 1.

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

Ví dụ

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

Giải thích - vì giá trị giai thừa của 6 là 720 và nó chứa 3 chữ số nên kết quả là 3

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

Giải thích - vì giá trị giai thừa của 12 là 479001600 và nó chứa 9 chữ số nên kết quả là 9.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập số giai thừa cần được tính.

  • Nếu số nhỏ hơn 0 thì trả về 0 vì số âm không có bất kỳ giá trị yếu tố nào

  • Nếu số là 1 thì trả về 1 vì 1! Là 1 và nó có 1 chữ số.

  • Nếu số lớn hơn 1, tức là bắt đầu bằng 2 hoặc nhiều hơn, hãy tạo một vòng lặp, bắt đầu từ 2 cho đến khi nhỏ hơn hoặc bằng số

  • Lấy một biến tạm thời, giả sử là d và khởi tạo nó bằng 0 bên ngoài vòng lặp và bên trong vòng lặp tiếp tục thêm nó với giá trị log10 (i) cho đến mỗi lần lặp lại của tôi.

  • Sau đó, trả về giá trị sàn của ‘floor (d) +1’

  • In kết quả.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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