普通阶层的计算方法以及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]);
  }
}
posted @ 2024-04-03 13:56  不会笑的孩子  阅读(17)  评论(0编辑  收藏  举报