首页 » C语言 » [PTA] 4-10 阶乘计算升级版

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

原文 http://blog.csdn.net/dazhangyu97/article/details/76982783

2017-08-09 15:20:06阅读(252)

PTA 4-10 阶乘计算升级版

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

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

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

裁判测试程序样例:

#include <stdio.h>
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]);
    }
}
心得: 大数阶乘,擅于用进位。 数组要开大,足够大! 数据全局比较好。

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹