码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-18 12:44:22      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:col   inpu   i++   func   计算   逻辑   循环   strong   clipboard   

题目地址

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

函数接口定义:

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分)

标签:col   inpu   i++   func   计算   逻辑   循环   strong   clipboard   

原文地址:https://www.cnblogs.com/expedition/p/12208593.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!