• 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");
        }
    }
  • 相关阅读:
    SqlMembershipProvider的配置
    自定义HtppHandler和HttpModule
    [导入]Sql Server 2005 Express中配置用户
    [导入]Asp.net中使用客户端脚本的方法
    JumpServer 架构浅解
    你准备好开始DevOps了吗?
    为什么是戒了爱你
    今天考试了
    [心疼女友]
    这个世界看不清
  • 原文地址:https://www.cnblogs.com/expedition/p/12208593.html
Copyright © 2020-2023  润新知