给我们一个整数值,任务是首先计算一个数字的阶乘,然后计算结果中的总位数。
数字的阶乘是通过将数字中的数字相乘,同时将数字的值减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