PAT 6-10

6-10 阶乘计算升级版 (20 分)

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

函数接口定义:

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;
}

/* 你的代码将被嵌在这里 */
void Print_Factorial ( const int N )
{
    int n=N;
    if(n<0)
    {
        printf("Invalid input");
        return;
    }
    int nums[10000]={0};    //创建一个数组用于存放结果
    int k=1;    //结果的位数,最少为1
    int up=0;   //进位
    nums[0]=1;  //初始化个位结果为1
    int temp;
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<k;j++)
        {
            temp=nums[j]*i+up;      //临时结果=前阶乘结果的某位*i+up
            nums[j]=temp%10;    //临时结果给位的数
            up=temp/10;        //看是否需要进位
        }
        while(up!=0)        //看最后得到的up是否需要进位
        {
            nums[k]=up%10;    //现最高位上的数
            up/=10;     //up>0则需进位,k++
            k++;
        }
    }
    for(int i=k-1;i>=0;i--)
    {
        printf("%d",nums[i]);       //输出最终结果
    }
}

 

posted @ 2021-10-20 22:02  疯在其中不愿醒  阅读(149)  评论(0)    收藏  举报