1000!C语言算法求解

C语言求解1000!

题目源于PTA编程平台,个人练习。由于阶乘之后的结果值过大,采用普通的数据类型无法存储,因此采用数组的方式进行存储。主要方法: 数组进位

  • 代码如下:
#include 
void Print_Factorial ( const int N );

int main()
{
    int N;
    
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}
void Print_Factorial( const int N )
{
    int num = N;
    int a[3000] = {1}; //定义存储最终结果的数组
    int size = 1; //记录当前计算得出的结果,占据数组的长度
    int carry_bit = 0; //进位值
    int i, j, temp; //i,j计数器

    if (num < 0) 
    {
        printf("Invalid input\n");
    }
    else if (num == 0)
    {
        printf("1\n");
    }
    else
    {
        for (i = 1; i <= N; i++)
        {
            for (j = 0; j < size; j++)
            {
                temp = i * a[j] + carry_bit; //temp存储本次计算结果
                a[j] = temp % 10; //求余取得低位放在低位数组里
                carry_bit = temp / 10; //求出进位
            }
            while (carry_bit) //只要还存在进位值,就向高位赋值. 如:99*99 = 9801.
            {
                a[size++] = carry_bit % 10;
                carry_bit /= 10;
            }
        }
        while (size--) //倒序输出
        {
            printf("%d", a[size]);
        }
    }
    printf("\n");
}
  • 输出如下:
  • 参考来源:https://blog.csdn.net/peace1024/article/details/78077642

你可能感兴趣的:(C语言)