普通阶层的计算方法以及100的阶层
普通的阶层我们的计算方法
循环方法
#include<stdio.h>
int main()
{
int num = 0;
unsigned long long factorial = 1;
printf("请输入一个整数:");
scanf("%d",&num);
if(num < 0 )
{
printf("负数没有阶层.\n");
}
else
{
for(int i = 1; i< = num; ++i)
{
factorial * = i;
}
printf("%d的阶层是%llu",num,factorial);
}
return 0;
}
递归方法
#include <stdio.h>
unsigned long long factorial(int num);
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
// 如果输入的数是负数,则无法计算阶乘
if (num < 0)
printf("负数没有阶乘。\n");
else
printf("%d 的阶乘是 %llu\n", num, factorial(num));
return 0;
}
unsigned long long factorial(int num) {
if (num == 0)
return 1;
else
return num * factorial(num - 1);
}
100的阶层计算方法
在C语言中,long long是一种整数类型,其范围由编译器实现的平台决定,但通常的情况下,long long的范围至少是-9223372036854775808到9223372036854775807(包括这两个数),这是因为它至少要能表示64位有符号整数的范围。
通常情况下,long long类型占据8个字节(64位),这也是因为它是一个64位的整数类型。不过,这也取决于编译器和平台的具体实现。
一般来说,阶层的计算使用循环或者递归即可完成,但是100的阶层结果过于庞大,计算机中涉及的数据类型没有可以显示
,因此,我们用数组来分别存下结果的每一位,并显示。
#include <stdio.h>
int main(int argc,const char* argv[])
{
int arr[256] ={1};//定义了一个长度为256的整型数组,并初始化为1.这个数组用于存储阶层的结果。
int cnt = 1;//记录目前最高位的后一位。初始化为1,表示目前只有一位数字。 cnt 用于记录数组 arr 中当前有效的位数,即阶乘结果的位数。
for(int i = 2;i<=100;i++)
{
int carry = 0;//记录进位的数,外循环开始清理
for(int j = 0;j<cnt;j++)
{
int num = arr[j]*i+carry;//数组的第j项*i,并加上前一次得到的进位
arr[j] = num%10;//第j位存结果的个位 余数是用于存储
carry = num/10;//得到这一次相乘的进位 因为两个数(0-9)得到的结果0-81 求到的商是进位
}
while(carry)
{
arr[cnt] = carry%10;//数组最高位存进位的个数
cnt++;//最高位加一
carry/ = 10;//carry去掉最后一位
}
}
while(cnt--)
{
printf("%d",arr[cnt]);
}
}