当前位置: 首页 > 编程笔记 >

用C ++计算阶乘中的位数

子车俊材
2023-03-14
本文向大家介绍用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开始,直到小于或等于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 ++中计算给定范围内的阶乘数,包括了在C ++中计算给定范围内的阶乘数的使用技巧和注意事项,需要的朋友参考一下 给定范围是从变量保存的整数值开始,比如说从开始直到变量结束,而任务是计算给定范围内可用的阶乘数的总数。 什么是阶乘数 数字的阶乘是通过将数字中的数字相乘,同时将数字的值减1来计算的。它由符号“!”表示 即0!,1!,2!,3!,5!,....等 0阶乘!和1!始终为1

  • 假设我们有一个非常大的阶乘,如(10^7)!,有没有一种有效的方法来计算它的精确数字?(Wolfram alpha结果表示(10^7)!有657060位) 当然,我不能通过将值一个接一个地相乘来使用朴素的实现,因为它太慢了,无法评估结果。 我认为这个问题的解决方案最终可能是 如何在不计算阶乘的情况下找到阶乘的位数 如何更有效地计算阶乘(最好是BigInteger或BigDecimal) 我更喜欢1

  • 问题内容: 我正在尝试计算阶乘产生的数字的尾随零(这意味着数字变得很大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。但是,当数字大约为25!时,numZeros将不起作用。 我并不担心这段代码的效率,并且我知道有多种方法可以使这段代码的效率更好。我要弄清楚的是为什么计数大于25的数字结尾的零!不管用。 有任何想法吗? 问题答案: 您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案

  • 我试图计算阶乘中尾随零的数量。 我认为尾随零的数量不正确。 使用计数(30)时,30中有7个尾随的0。然而,它正在返回6。

  • 我需要计算特定数字的计数(介于0之间 这适用于小数字输入:7 0输出:2描述:7!=5040有两个零,但对于大数字需要很长时间输入: