用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

以上是 用C ++计算阶乘中的位数 的全部内容, 来源链接: utcz.com/z/351433.html

回到顶部