[PTA] 4-10 阶乘计算升级版

PTA 4-10 阶乘计算升级版

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:
void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include 

void Print_Factorial ( const int N );

int main()
{
    int N;

    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:
15
输出样例:
1307674368000

提交的代码:

int a[50000] = { 1, 0 }; //全局大数组
void Print_Factorial(const int N)
{
    if (N<0)
        printf("Invalid input\n");
    else if (N == 0)
        printf("%d\n", 1);
    else
    {
        //static int a[50000] = { 1, 0 };
        int i, j, carry, tmp, length = 1;
        //length知道数组从哪开始为0
        for (i = 2; i <= N; i++)
        {
            carry = 0; //进位
            for (j = 0; j <= length; j++)
            {
                tmp = a[j] * i + carry;
                a[j] = tmp % 10;
                carry = tmp / 10;
                //若位数相等且有进位,长度加一 
                if (j == length-1 && carry != 0) 
                    length++;
            }
        }
        //printf("%d\n",length-1);
        for (int k = length-1; k >= 0; k--)
            printf("%d", a[k]);
    }
}

心得:

  • 大数阶乘,擅于用进位。
  • 数组要开大,足够大!
  • 数据全局比较好。

你可能感兴趣的:(PTA习题练习)