精华内容
下载资源
问答
  • c语言 阶乘计算

    万次阅读 多人点赞 2019-05-31 11:13:18
    阶乘计算 问题描述  输入一个正整数n,输出n!的值。  其中n!=123*…*n。 算法描述  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A...

    阶乘计算

    问题描述
      输入一个正整数n,输出n!的值。
      其中n!=123*…*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

    伪代码分析:

    对于数字过大超出 int,float,double类型的数字范围以至于可能会溢出的情况,需要考虑到如何防止或者说是解决溢出问题,数组就是一个不错的解决方式,a[0]-a[MAX] 每个元素保存四位数字,依次逐个存储
    
    for (i = 1; i <= n; i++)
    {
    	for (j = 0; j < m; j++)
    	{
    		a[j] = a[j] * i + k;
    		k = a[j] / 10000;		/// 穿如下一数组元素的进位数据
    		a[j] = a[j] % 10000;	// 可输出的a[] 的值
    	}
    	if (k)
    	{
    		a[j++] = k;			// 进位数据传给下一个
    		m++;
    		k = 0;
    	}
    }
    

    代码描述(已验证):

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 10000
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) 
    {
    	int i,j;
    	int n,m=1,k=0;		// j 辅助运算  k 暂时保存 进位数据  m 阶乘计算后a[] 数组的元素个数  每个元素包含四位
    	int a[MAX] = { 1 };
    
    	scanf("%d", &n);
    	
    	for (i = 1; i <= n; i++)
    	{
    		for (j = 0; j < m; j++)		// 保证每一个 数组元素都可以 *i  值
    		{
    			a[j] = a[j] * i + k;
    			k = a[j] / 10000;		/// 传入下一数组元素的进位数据
    			a[j] = a[j] % 10000;	// 可输出的a[] 的值
    		}
    		if (k)
    		{
    			a[j++] = k;			// 进位数据传给下一个
    			m++;
    			k = 0;
    		}
    	}
    	printf("%d", a[m - 1]);		// 输出最后一个溢出但是尚未进位,但是
    	for (i = m - 2; i >= 0; i--)	 //输出数据
    	{
    		printf("%04d", a[i]);
    	}
    	return 0;
    }
    

    其实这个题给的最大的启发就是 用数组解决一些溢出问题,还是挺方便的

    泡泡,收工

    展开全文
  • 有关阶乘1/1+1/2+1/3.....+1/10,我这段代码是什么问题,导致计算不出正确的结果?
  • 阶乘计算 题目描述:输入一个正整数n,输出n!的值。其中n!=123*…*n。 算法描述:n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]...

    阶乘计算

    题目描述:输入一个正整数n,输出n!的值。其中n!=123*…*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 <stdio.h> 
    #define MAX 10000
    
    main() {
    	int n, i, j, tmp, up;
    	char a[MAX + 1] = {1};
    	
    	scanf("%d",&n);
    	//计算进位
    	for(i = 2; i <= n; i++) {
    		for(up = 0, j = 0; j <= MAX; j++) {
    			tmp = a[j] * i + up;
    			a[j] = tmp % 10;
    			up = tmp / 10;
    		}
    	}
    	//输出 
    	for(i = MAX; i >= 0; i--) {
    		if(a[i] != 0) {
    			for(i; i >= 0; i--) {
    				printf("%d",a[i]);
    			}
    		}
    	}
    }
    
    展开全文
  • c语言 简单阶乘计算

    千次阅读 2020-03-17 11:25:34
    本题要求实现一个计算非负整数阶乘的简单函数。 函数接口定义: int Factorial( const int N ); 其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。 裁判测试程序样例:...

    本题要求实现一个计算非负整数阶乘的简单函数。

    函数接口定义:

    int Factorial( const int N );
    

    其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。

    裁判测试程序样例:

    #include <stdio.h>
    
    int Factorial( const int N );
    
    int main()
    {
        int N, NF;
    	
        scanf("%d", &N);
        NF = Factorial(N);
        if (NF)  printf("%d! = %d\n", N, NF);
        else printf("Invalid input\n");
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    我的答案:

    int Factorial( const int N )
    {
        int sum=1;//不能定义0
        
        if(N<0)
        {
            return 0;
        }
        for(int i=1;i<=N;i++)
        {
            sum=sum*i;
        }
        return sum;
    }
    

    完整程序:

    #include <stdio.h>
    
    int Factorial( const int N );
    
    int main()
    {
        int N, NF;
    	
        scanf("%d", &N);
        NF = Factorial(N);//这里的NF写法值得学习,以前没写过类似的
        if (NF)  printf("%d! = %d\n", N, NF);
        else printf("Invalid input\n");
    
        return 0;
    }
    int Factorial( const int N )
    {
        int sum=1;
        
        if(N<0)
        {
            return 0;
        }
        for(int i=1;i<=N;i++)
        {
            sum=sum*i;
        }
        return sum;
    }
    
    展开全文
  • 可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意...

    资源限制
    时间限制:1.0s 内存限制:512.0MB
    问题描述
      输入一个正整数n,输出n!的值。
      其中n!=123*…*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<stdio.h>
    int main(){
    	int n;
    	scanf("%d",&n);
    	int weishu=1;
    	int num=0;
    	int a[10000]={0};
    	int k,i;
    	a[1]=1; 
    	for(k=2;k<=n;k++){
    		for(i=1;i<=weishu;i++){
    			a[i]=a[i]*k+num;  //将数组中每一个元素乘k,如果前一位乘数大于9产生的进位记录在num中  先乘后加 
    			if(a[i]>9){        //如果得数大于9 代表需要进位 
    				num=a[i]/10;       //需要加的数先记录在num上 
    				a[i]=a[i]%10;
    			}
    			else{
    				num=0;		//不需要进位 num为0 
    			}
    			if(num!=0&&i==weishu){   //当前最高位数进位了 位数加1 
    				weishu++;
    			}
    		}
    		
    	}
    	for(i=weishu;i>=1;i--){
    		printf("%d",a[i]);
    	}
    }
    

    这里需要注意的是增大位数的条件是:当前最高位的数进行乘法运算后的得数大于9,则使得num不为0,则位数需要加一位。

    展开全文
  • 本文实例讲述了C语言实现的阶乘,排列和组合。分享给大家供大家参考。具体如下: #include int Factorial(int n) { int i=0; int sum=1; int array[]={0}; for(i=n;i>=1;i--) { sum=sum*i; } return sum; }...
  • 6-10 阶乘计算升级版 (20 point(s)) 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数...
  • C语言实现计算大数的阶乘

    千次阅读 2019-08-12 14:30:20
    C语言实现计算大数的阶乘C语言中,double类型的数据虽然可以表示一个很大的数,但是由于尾数只占16位,所以其精确表示的位数只有16位,那么如何表示一个很大的数的阶乘值呢? 我们可以采用数组来表示该阶乘的...
  • c语言 分数阶乘计算

    千次阅读 2017-10-13 11:54:20
    计算n为1~100的[(-1)^(n+1)*(1/n)]!
  • C语言阶乘函数

    千次阅读 2020-06-17 15:14:53
    实现阶乘函数 //简单的 double fact(int n){ if (n==o){ return 1; } else{ double f=1,i; for(i=1;i<=n;i++){ f*=i; } return f; } } //改良 double fact(int n) { if (n == 0) return 1; ...
  • C语言计算阶乘阶乘的和

    万次阅读 多人点赞 2018-10-28 21:15:38
    从键盘输入一个数,用C语言计算该数的阶乘 #include &amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; int main() { int i,sum = 0, p = 1, n; scanf(&quot;%d&quot;,&...
  • #include #define N 10000 int main() { int a[N]={1}; int k=0,l=1,n; int i,j; scanf("%d",&n); for(i=1;i;i++) { for(j=0;...哪位大神可以告诉我这代码是什么意思怎么运行的,看不懂小白一名
  • 输入一个数n后,把n!这个数分解后可见,只有出现2 * 5时0的个数才会增加,而2的个数是大于5的,所以可用循环将n!一直除以5以判断5的个数,再将其输出即可。该方法较为简易,欢迎指正
  • C语言计算阶乘阶乘的和

    千次阅读 2021-07-09 14:11:22
    计算 n的阶乘。要实现这个阶乘的值并不难,只需要运用到for循环依次相乘即可,但要注意for循环i的初始值一定是从1开始到n结束。 #include<stdio.h> int main() { int i,n; int ret = 1;//用于存放阶乘的值 ...
  • ”表示阶乘,例如:5!=5*4*3*2*1。 输入输出格式 输入格式: 一个正整数N。 输出格式: 一个正整数S,表示计算结果。 输入输出样例 输入样例 3 输出样例 9 #include int fun(int n) { if(n==1||n==0) { ...
  • 阶乘计算升级版

    2017-05-01 20:54:25
    4-10 阶乘计算升级版 (20分) 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数...
  • C语言——计算大数阶乘

    千次阅读 2019-04-26 20:12:03
    学过C语言的同学都知道,C语言能表示最大的数就是long double了,但是就算是这样一个数也最多能计算170及以下的阶乘,而对于170以上的大数阶乘却无法用来表示。 因此下面介绍一种来计算大数阶乘的方法。 #include &...
  • c语言 计算阶乘之和.c

    2021-11-08 23:47:41
    c语言 计算1!+2!+...+n!
  • C语言 计算阶乘 防止溢出方法

    千次阅读 多人点赞 2019-02-08 21:20:18
    C语言 计算阶乘防止溢出方法 思路: 1.用数组存储每一位 2.将每一位都与1-n中的每一个数相乘 3.计算进位和本位数 4.处理最后的进位情况 #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #define ...
  • 3.每次进行判断产生的随机数是多少,如果随机数与原来计算过得随机数是相等的话,直接返回结果。如果n大于原来结构体内old.n的值的话,则不需要从1累加,直接从原来的结果进行累加。 举例:如果计算过4!以后,再...
  • #C语言解决计算阶乘问题 #include<stdio.h> int main() { int i,j=1,n;//这里必须把j的值设成1 scanf("%d",&n); //输入你想求的阶乘的数 for(i=1;i<=n;i++)//用for循环处理会更简单 j=i*j;//把阶乘结果...
  • C语言 计算阶乘

    2020-09-29 22:27:06
    题目:对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。 输入格式: 输入在一行中给出一个不超过10的正整数N。 输出格式: 在一行中输出S的值。 输入样例: 3 输出样例: 9 代码如下: #include<stdio.h> ...
  • c语言阶乘

    千次阅读 2021-01-12 16:45:34
    如何用c语言阶乘 例:求10的阶乘。 #include<stdio.h> int main(){ int i,sum=1; for(i=1;i<=10;i++) { sum*=i; } printf("%d",sum) return 0; }
  • #include #define N 10000 int main() { int a[N]={1}; int k=0,l=1,n; int i,j; scanf("%d",&n); for(i=1;i;i++) { for(j=0;j;j++) { a[j]=a[j]*i+k; k=a[j]/10000; a[j]=a[j]%10000;...
  • c语言阶乘之和问题

    万次阅读 2018-05-11 21:59:32
    ”表示阶乘,例如:5!=5*4*3*2*1。 输入输出格式 输入格式: 一个正整数N。 输出格式: 一个正整数S,表示计算结果。 输入输出样例 输入样例 3 输出样例 9 #include<stdio.h> int fun(int n) { if(n==1||n...
  • #include <stdio.h> #include<...//计算阶乘结果含有零的个数。 printf("请输入一个你想求的数的阶乘:\n"); scanf_s("%d", &a); for (n = x = 1; n <= a; ++n) { x ..
  • C语言:连续阶乘计算

    2020-02-23 16:21:11
    阶乘计算 算法思路 1、依靠循环来实现累乘计算; 2、res*=n; //阶乘计算 #include<stdio.h> int main() { int i; int n; int res=1; printf("请输入一个整数:"); while(scanf("%d",&n)>0)...
  • c语言-简单阶乘计算

    千次阅读 2018-09-07 22:06:33
    6-8简单阶乘计算(10 分) 本题要求实现一个计算非负整数阶乘的简单函数。 函数接口定义: int Factorial( const int N ); 其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,...
  • 1、计算n的阶乘: 2、计算1-10的阶乘之和:
  • C语言计算100的阶乘

    万次阅读 多人点赞 2019-06-01 00:16:49
    学习是一个过程 , 打好坚实的基础往往可以起到事半功倍的效果 , 有时候看似浪费...100的阶乘是一个十分庞大的数字 , 已经超过了C语言数据类型所能表示的最大数字 . 因此我们需要另外寻找方法来计算这个庞大的数字 ....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,744
精华内容 3,497
关键字:

c语言阶乘计算

c语言 订阅