Advertisement

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

本题输入数值最大为1000,在常规方式下(即变量定义为double)理论上能够计算出175!的结果。但当输入数值超出计算机精度范围时,则建议采用动态数组技术进行处理。其中数组元素用于存储每一位数字(即各个位上的数值),进位标志位用于记录进位情况,并标记当前处理的位置索引t。通过逆序拼接各元素值即可完成最终结果的输出。

复制代码
    void Print_Factorial ( const int N )
    {int i=2,a[3000]={0},j,t=1,n=0;
     if(N<0) printf("Invalid input");
     else
      {
    a[0]=1;
    for(;i<=N;i++)
    for(j=0;j<t;j++)
    { int m;
       m=a[j]*i+n;         //该位的数字*i加上前一位的进位
       a[j]=m%10;          //结果的个位数在该位上 
       n=m/10;             //结果的十位就是下一位的进位
       if(j==t-1&&n)       //如果处理到了最后目前最高位,且还有进位,位数加1
        t++;
    }
    
       for(i=t-1;i>=0;i--)
     printf("%d",a[i]);
      }
    }

全部评论 (0)

还没有任何评论哟~