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

要求:

实现一个打印非负整数阶乘的函数

N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”

 1 #include <stdio.h>
 2
 3 void Print_Factorial( const int N);
 4 int main(){
 5     int N;
 6     scanf("%d",&N);
 7     Print_Factorial(N);
 8     return 0;
 9 }
10 void Print_Factorial( const int N){
11     if(N<0){
12         puts("Invalid input");
13         return;
14     }
15
16     int num[3001]={0};
17     int k,n;
18     k=1;    //位数
19     n=0;    //进位
20     num[0]=1;
21     int tmp;
22
23     //将临时结果的每位与阶乘元素相乘
24     for(int i=2;i<=N;i++){
25         for(int j=0;j<k;j++){
26             tmp=num[j]*i+n;
27             num[j]=tmp%10;
28             n=tmp/10;
29         }
30         while(n){
31             num[k++]=n%10;
32             n/=10;
33         }
34     }
35     for(int i=k-1;i>=0;i--){
36         printf("%d",num[i]);
37     }
38     puts("");
39 }
  • int范围为10^9,long long int范围为10^18
  • 采用斯特林公式,当N=12时,计算结果已经为9位,N=1000时结果将超过long long int范围
  • 采用模拟乘法计算阶乘

参考:

https://blog.csdn.net/weixin_42584977/article/details/90771118

原文地址:https://www.cnblogs.com/cxc1357/p/12222823.html

时间: 2024-08-30 06:42:41

PTA——6-10 阶乘计算升级版的相关文章

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

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

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"

PTA之简单阶乘计算

本题要求实现一个计算非负整数阶乘的简单函数. 时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: int Factorial( const int N ); 其中N是用户传入的参数,其值不超过12.如果N是非负整数,则该函数必须返回N的阶乘,否则返回0. 裁判测试程序样例: 1 #include <stdio.h> 2 int Factorial(const int N); 3 int main() 4 { 5 int N, NF; 6 scanf_s(&q

4-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&

阶乘计算 高精度

基础练习 阶乘计算 时间限制:1.0s   内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*…*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值. 输入格式 输入包含一个正整数n,n<=100

蓝桥杯 基础练习 BASIC-30 阶乘计算

基础练习 阶乘计算 时间限制:1.0s   内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值. 输入格式 输入包含一个正整数n,n<=100

[BASIC-30] 阶乘计算

基础练习 阶乘计算 时间限制:1.0s   内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值. 输入格式 输入包含一个正整数n,n<=100

十五:阶乘计算

题目:阶乘计算 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n.算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值.输入格式 输入包含一个正整数n,n<=1000.输出格式 输出n!的准确值.样例输入10样例输出3628800

基础训练 阶乘计算

阶乘计算 自己写的超时了,这里直接贴出别人的代码了 #include<iostream> #include<string.h> using namespace std; int main(){ int n,s,r=0,a[10005]; cin>>n; memset(a,0,sizeof(a)); a[0]=1; for(int i=1;i<=n;i++){ for(int j=0;j<10001;j++){ s=a[j]*i+r; a[j]=s%10; r