用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开始,直到小于或等于number

  • 取一个临时变量,假设d,并在循环外和循环内将其初始化为0,并继续将其与log10(i)的值相加,直到i的每次迭代为止。

  • 之后,返回底值'floor(d)+1'

  • 打印结果。

示例

#include <iostream>
#include <cmath>
using namespace std;
//此函数返回以num为单位的位数!
int count_digits(int num){
   // factorial exists only if num <= 0
   if (num < 0){
      return 0;
   }
   //基本情况
   if (num <= 1){
      return 1;
   }
   //否则遍历num并计算
   //值
   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