c语言计算20的阶乘
㈠ 1到20阶乘的和用c语言表达
#include <stdio.h>
long jiecheng(int x)
{
long int i,k=1;
for(i=1;i<=x;i++)
k=k*i;
return k;
}
int main()
{
long int j,k=0;
int i;
for(i=1;i<=20;i++)
{
j=jiecheng(i);
k+=j;
}
printf("%ld ",k);
}
(1)c语言计算20的阶乘扩展阅读:
使用其他方法实现求1到20阶乘的和:
public class Main{
public static void main(String[] args){
int i,j;
int sum=0;
int a=1;
for(i=1;i<=20;i++){
for(j=1;j<=i;j++){
a*=j;
}
sum+=a;
}
System.out.print("sum=1!+2!+3!+...+20!="+sum);
}
}
㈡ c语言题:用递归法求20个阶乘
#include"stdio.h"
doublejc(doublen)
{
if(n>1)
returnjc(n-1)*n;
else
return1;
}
intmain()
{
doublei;
for(i=0;i<=20;i++)
printf("%.0lf ",jc(i));
}
再给一个完全用递归的:
#include"stdio.h"
doublejc(doublem,doublen)
{
if(m>1)
{
if(n>1)
{
if(m==n)
printf("%.0lf ",jc(m,n-1)*n);
else
returnjc(m,n-1)*n;
}
else
{
if(m>0)
jc(m-1,m-1);
return1;
}
}
else
{
printf("1 ");
}
}
intmain()
{
doubles[20],m;
m=20;
jc(m,m);
}
㈢ 这个c语言程序我想求20的阶乘输出的是21
#include <stdio.h>
double f(double n) //一个递归
{
if(n==0 || n==1) return 1;
else
return n*f(n-1);
}
int main()
{
double s, n=20 ;
s=f(n);
printf("s=%f\n",s);
return 0;
}
你可以运行一下 ,结果和网络计算的是一样的。
20的阶乘如果用int存储的话会溢出的,所以我用double存储。其实用一个int数组存储应该更好。
满意请采纳。
㈣ C语言1到20的阶乘
#include<stdio.h>
intmain()
{
inti=20,j,z=20,h=1,sum=0;
for(j=0;j<20;j++)
{
while(i>0)
{
h=i*h;
i--;
}
sum=sum+h;
z--;
i=z;
}
printf("1到20的阶乘和为: ",sum");
return0;
}
㈤ 利用C语言求阶乘 例如求20! 用循环和函数两种方法……
对于阶乘,你需要考虑到输入的数的大小,进行判断n<0,无阶乘;n==0||n==1阶乘为1;
n>1的就用户循环,或者调用函数来做
1.循环
#include<stdio.h>
void main()
{
float sum=1;
int n,i;
printf("please enter an integer number:");
scanf("%d",&n);
printf("\n");
if (n<0)
printf("n<0,data error!\n");
else if(n>1)
{
for(i=2;i<=n;i++)
sum=sum*i;
printf("%d!=%10.0f\n",n,sum);
}
else
if(n==0||n==1)
{
sum=1;
printf("%d!=%10.0f\n",n,sum);
}
}
2.函数
#include <stdio.h>
void main()
{
float fac(int n);
int n;
float y;
printf("input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%10.0f\n",n,y);
}
float fac(int n)
{
float f;
if(n<0)
{
printf("n<0,data error");
}
else
if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return (f);
}
㈥ C语言:编写程序,求20的阶乘.
给你个通用的。运行后输入20
记得多加点分
#define M 20000 /* 最大结果位数,DOS能访问的内存有限,最好不要超过 30000 位*/
#define N (M+5)
main()
{
int Num;
register int i,j,k,flag;
register unsigned int n,m,pc;
unsigned char str_n[5],result_0[N],result_1[N];
void fun_print_result(char *result,int flag);
int fun_mul(char *a,char *b,char *c,int flag);
printf("输入计算其阶乘的数:Num = ");
scanf("%d",&Num);
if(Num >= 100)
{
printf("\n正在进行阶乘运算. . .\n");
printf("已完成 00000 的阶乘,请等待. . .");
}
for (j=0;j<N;j++)
{
result_1[j] = 0; result_0[j] = 0;
}
result_1[N-1] = 1;
for(i=0;i<5;i++)
{
str_n[i] = 0;
}
n = 1;
pc = 0; flag = N-1;
while (n <= Num)
{
m = n;
k = 4;
while(m > 0)
{
str_n[k] = m%10; m /= 10; k--;
}
if (pc%2 == 0)
{
if(fun_mul (str_n,result_1,result_0,flag) != 1)
{
printf("\n\n结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);
exit(0);
}
}
else
{
if(fun_mul (str_n,result_0,result_1,flag) != 1)
{
printf("\n\n结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);
exit(0);
}
}
flag = flag-(4-k); /* flag 标记相乘后“可能的”第一个有效数字的标号 */
if(pc%2 == 0) /* 再处理一次使 flag 正好标记第一个有效数字的标号 */
{
if(result_0[flag] == 0) flag++;
}
else
{
if(result_1[flag] == 0) flag++;
}
n++; pc++;
if((pc)%25 == 0 && Num >= 100 && pc >= 100)
{
printf("\r已完成 %5d",pc);
}
}
if(Num >= 100) printf("\n");
if ((pc-1)%2 == 0)
{
fun_print_result (result_0,flag);
}
else
{
fun_print_result (result_1,flag);
}
}
int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函数 */
{
register int i,j;
for(j=flag;j<N;j++) c[j]=0;
for(i=4;i>=0;i--)
{
if(a)
{
for (j=N-1;j>=flag;j--)
{
if(b[j])
{
c[i+j-4] += a[i]*b[j];
}
if(c[i+j-4] > 9)
{
c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;
}
}
}
}
if(flag < 10)
{
if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 结果溢出判断 ***/
{
return 0;
}
}
return 1;
}
void fun_print_result(char *result,int flag) /* 输出结果函数 */
{
int p;
printf("\n本次计算结果共有 %d 位,如下:\n\n",N-flag);
for(p=flag;p<N-1;p++)
{
printf("%d",result[p]);
if((p+1-flag)%(21*80) == 0)
{
printf("\n计算结果太长,请按任一键看下一屏,Esc 退出");
if(getch() == 27)
{
clrscr(); exit(0);
}
clrscr();
}
}
printf("%d",result[N-1]);
printf("\n\n[OK]");
}
㈦ C语言计算20!要求保留所有数字
20!的阶乘值超过了int 32bit的数值范围,但是在long long 64bit的范围内。
#include<stdio.h>
intmain(){
longlonga=1;
for(inti=2;i<=20;++i){
a*=i;
}
printf("%lld ",a);
return0;
}
如果在大一些,long long也不行了,需要用大整数乘法,这样你就需要考虑用别人实现的大整数乘法库什么的了。Java有BigInteger的支持,专门处理这种问题
㈧ 用C语言求20的阶乘,为什么会有溢出啊
因为阶乘50太大了,变量存不下,所以最后显示0,如果你将阶乘数改小一点就没问题了,比如10
或者将int型改成long
long型,然后结果已%lld输出,但40、50的阶乘也无法容纳,因为结果太大了,20、30还可以
㈨ 1到20的阶乘 C语言
用递归就行了,问题是阶乘1到20已经溢出了unsigned
long
int的最大数值,1到16就已经溢出了,何况你的还是有符号的,比无符号的少差不多一半.
这个用递归实现的.
#include<stdio.h>
void
main()
{
int
fac(int
x);
unsigned
long
int
y;
int
x;
printf("请输入一个整数:");
scanf("%d",&x);
y=fac(x);
printf("%ld\n",y);
}
int
fac(int
x)
{
unsigned
long
int
y;
if(x==1)
{
y=1;
}
else
y=fac(x-1)*x;
return
y;
}
㈩ C语言,计算20的阶乘,结果要用什么数据类型
使用 unsigned long long类型绝对的够了,下图是最后的运算结果:
unsigned long long类型是C语言里面目前精度最高的数据类型,
double或者longdouble虽然也占有8个字节,但是他们的实际精度只有53位,
而 unsigned long long却有64位的精度,
具体的话,可以看我的帖子:
① C语言视频 VS2015:[7]基本数据类型:
http://jingyan..com/article/ceb9fb10c1abac8cad2ba0ca.html
② C语言视频 VS2015:[10]printf:
http://jingyan..com/article/8ebacdf021253d49f65cd539.html
希望对你有用,我是ndk吧吧主,有问题可以ndk吧留言,谢谢!