C语言求阶乘问题

题目描述
求n!,其中,n为用户输入的任何整数。(n<=50,具体值由用户输入)
输入
任意输入一个整数(不超过50)
输出
该数的阶乘
样例输入
5

样例输出
120

我的程序到17以上就无法输出了,应该怎么解决?附上源程序

#include<stdio.h>
main()
{
int a,i,s;
s=1;
scanf("%d",&a);
for (i=1;i<=a;i++)
s=s*i;
printf("%d\n",s);
}

这个是大数阶乘的问题
int(假设4字节、32位)的存储范围为 [-2147483648,2147483647],
而17!是355687428096000,超出了int 的存储范围,所以出错了
要解决类似的阶乘问题,需要用一个数组在存放计算结果的不同位,比如定义一个array数组
array的每一个元素存放结果的5位,数组初始化时,只有最低的元素是1,其他是0;计算s=s*i的时候把i和数组中的每一个元素相乘,结果该进位的进位并求余,这样就可以得到50!了
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-31
long类型也无法解决,超出了所在的类型。17!太大了吧。追问

那应该怎么解决呢?要求最大能输出到50!

追答

#include
int main()
{
int a,i;
double s;
s=1;
scanf("%d",&a);
for (i=1;i<=a;i++)
s=s*i;
printf("%.lf\n",s);
return 0;
}
用double类型吧。你直接复制看看答案。

本回答被提问者采纳
第2个回答  2014-10-31
把int 改成long型;
#include<stdio.h>
main()
{
int a,i;long s=1;
scanf("%ld",&a);
for (i=1;i<=a;i++)
s=s*i;
printf("%ld\n",s);
}追问

输入17的时候还是输出了一个负数,输入50就变成了0了。并且50!应该没有超出int所能表示的最大值范围啊

追答

额。50!=3.0414093201713378043612608166065e+64,而int 所能表示的数只有2^32=4294967296所以,已经没办法了表示了。而17!=355687428096000也已经远远大于int所能表示的数了好吧。

第3个回答  2014-10-31
你或许应该去搜搜高精度

C语言入门——求n的阶乘
通过编程实现阶乘计算,对理解算法和编程逻辑有重要意义。在C语言中,求n的阶乘主要有两种方式:循环或递归。循环方式包括for循环和while循环,而递归则是函数调用自身实现。阶乘的概念是基础数学概念,涉及连续乘积的运算。实现代码时,需考虑边界条件和性能问题。循环和递归各有优缺点,选择方式需基于具体场...

c语言如何求阶乘
在 C 语言中,可以使用循环或递归的方式来求阶乘。下面是示例代码:1. 使用循环方式求阶乘:2. 使用递归方式求阶乘:这两种方式都可以计算给定正整数的阶乘。循环方式是通过迭代累乘的方式计算,递归方式则是通过调用函数本身,将问题分解为更小的子问题进行求解。根据输入的数值不同,两种方式的效率可能...

c语言求n的阶乘程序
所谓n的阶乘就是从1到n的累积,所以可以通过一个for循环,从1到n依次求积即可。参考代码:include "stdio.h"int main() { int n,i,s=1。scanf("%d",&n)。for(i=1;i<=n;i++)\/\/for循环求累积。s=s*i。printf("%d\\n",s)。return 0。注意事项:1、任何大于1的自然数n阶乘表示方法...

求n的阶乘c语言
求n的阶乘c语言如下:第一步、编程的第一步就是写头文件,对于初学者来说,只写一个头文件就可以了,即#include<stdio.h>。第二步、就是定义我们的变量,我们需要定义一个n,用来求他的阶乘,sum用来保存结果,i用来循环。第三步、就是把sum初始化,为1.千万不要为0,保证后面的结果不出问题。...

c语言求3的阶乘
在C语言中,可以通过定义变量并进行相应的乘法运算来求阶乘。例如,可以定义一个名为result的变量,并将其初始化为1,然后使用for循环迭代乘以1到3之间的所有数字,最终得到3的阶乘即6。具体代码实现如下:int result = 1;for(int i = 1; i <= 3; i++){result *= i;}printf("3的阶乘为:...

关于C语言求一串阶乘的和,求高手帮我看一下!
解决此问题的方法是使用浮点型变量进行计算,以避免整数溢出。实际上,浮点型可以表示较大的数值范围,从而能够正确计算阶乘之和。将变量定义为浮点型(如float)后,代码能够准确输出结果。在代码实现中,确保变量类型与计算需求相匹配至关重要。在输入输出函数中,使用正确的函数名和参数类型同样重要。例如...

C语言程序求阶乘的和为什么结果不正确
在编写C语言程序用于计算阶乘和时,确保初始化变量是关键步骤。在循环语句for(j=1;j<=i;j++)之前,应该将sum1 = 1;赋值语句加入,以确保在循环开始时,sum1的值为1。问题通常出现在循环执行的初始阶段。在进行j循环之前,期望sum1的值为1,而不是其他数值。然而,当i循环执行第二次时,sum1的...

C语言中,如何计算阶乘?
首先是求阶乘:int factorial(int index){ int sum = 0;if (index == 1){ sum = 1;}else{ sum = index * factorial(index-1);} return sum;} 之后再求和:int add_recursion(int maxnum){ int sum = 0;if (maxnum == 1){ sum = factorial(maxnum);}else{ sum = factorial(...

C语言编程,求阶乘的运算方式!
1、首先在打开的C语言软件窗口中,在Main函数的上方,写上阶乘函数的框架,如下图所示。2、然后定义一个变量【result】,如下图所示。3、然后输入if判断语句,就可以写下程序的关键语句,如下图所示。4、接下来就可以调用输出,如下图所示。5、最后点击运行,如下图所示,就可以运行测试。

如何用c语言编程计算阶乘?
这道题是求从3-21,差为3的8个数阶乘的和,编写一个求阶乘之和的函数sum(),使用for循环进行阶乘的计算,最终和太大,因此使用科学计数方式表示输出。程序代码:include<stdio.h> float sum(int n){int i,j;float t,s=0;for(i=3;i<=n;i=i+3){t=1;for(j=1;j<=i;j++)t=t*j...

相似回答