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

Posted expedition

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA——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;
}

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

输入样例:

15
 

输出样例:

1307674368000

 

#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 k=1,n=0;
    int temp;
    int num[10000]={0};
    int i,j;
    num[0]=1;
    if(N>=0 && N<=1000)
    {

        //实现模拟高位阶乘
        //这里n是进位,k代表当前运算的数的位数
        for(i=2;i<=N;i++){
            for(j=0;j<k;j++){
                temp=num[j]*i+n;
                num[j] = temp%10;
                n=temp/10;
            }
            //上方的for循环,是【当前的数的每一位 *  i 】,运算过程中可能有进位n,所以要加上进位n ----> temp = num[j]*i+n; 然后将结果存在数组中
            //下方的while循环,是判定最后的结果是否有进位n,如果有进位n,则向后新加一位,即在k位置处填入相应的数字,再令k++,直到没有进位
            while(n!=0){
                num[k]=n%10;
                n=n/10;
                k++;
            }
        }
        //END:模拟高位阶乘
        //可以演算一边求 4!,过程逻辑应该很清晰


        for(i=k-1;i>=0;i--){
            printf("%d",num[i]);
        }
    }else{
        printf("Invalid input");
    }
}

以上是关于PTA——6-10 阶乘计算升级版 (20分)的主要内容,如果未能解决你的问题,请参考以下文章

PTA——6-10 阶乘计算升级版

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

PTA题目集导航

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

PTA 7-6 计算阶乘和 (10分)

PTA 程序设计天梯赛(1~20题)