C语言程序,求n大于等于50且小于等于500的阶乘

如题所述

第1个回答  2013-01-07
题目意思是不是这样的? 不是的可以追问
include<stdio.h>
void main()
{
int n,sum=1;
for(n=50;n<=500;n++)
{
sum *= n;
}
printf("%d",sum);
}追问

会超出位数的

第2个回答  2013-01-07
#include <stdio.h>
#define N 10005
#define MOD 10000
int a[N];
void fac(int n)
{
int i,j,m = 1,c;
a[0]=1;
for(i=1;i<=n;i++)
{
c = 0;
for(j=0;j<m;j++)
{
a[j] = a[j]*i+c;
c = a[j]/MOD;
a[j] %= MOD;
}
if(c)
a[m++] = c;
}
printf("%d!=",n);
printf("%d",a[--m]);
while(m--) printf("%04d",a[m]);
puts("");
}
int main()
{
int n;
//scanf("%d",&n);
for(n=50;n<=500;n++) fac(n);
return 0;
}追问

貌似有错啊。。。。

追答

我试了一下,1到50(即for(n=1;n<=50;n++) fac(n);)的貌似都没错,后面的没敢去算

第3个回答  2013-01-07
这个涉及大整数的问题,可以搜索百度文库里面我的文档《C语言编写大整数》,可以表示任意大的整数,并且有加减乘除等操作,遇到不懂的地方可以直接hi我帮你解决追问

全不会啊,求大神帮忙啊,。

追答

加上那Bignum.h和Bignum.c两个文件进你的工程,再加个main.c的文件,然后这样写:

#include
#include "BigNum.h"
BigNum JC(int n)
{
char buf[3];
if (n == 1 || n == 0)
{
return Init("1");
}
itoa(n, buf, 16);
return Mul(JC(n - 1), Init(buf));
}

int main()
{
printf("50!=");
Print_10(JC(50));
return 0;
}

第4个回答  2013-01-07
主要考虑位数是否够用,要用到大数乘法追问

求大神帮忙。。。

追答

你急吗?不急等等,急的话先找别人,我有点儿事儿,对不住了。

追问

不是很急。。。可以等的,谢了。。

追答

太折磨人了,我一夜没睡,终于完工了!
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAXCHAR 50000
char * MUL(char *ch1 , char *ch2 , char *ch3)
{// ch3 = ch1*ch2;
int i , j , len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , tmp , num1[MAXCHAR] , num2[MAXCHAR] , num3[MAXCHAR];
memset (num1 , 0 , sizeof(num1));
memset (num2 , 0 , sizeof(num2));
memset (num3 , 0 , sizeof(num3));
for (i=len1-1;i>=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48;
for (i=0;i= 10) { tmp = num3[i+j]/10; num3[i+j] %= 10; }
}
while (tmp != 0) { num3[i+j] += tmp; tmp = num3[i+j]/10; j ++; }
}
len3 = len1+len2;
while (len3 > 1 && num3[len3-1] == 0) len3 --;
for (i=0;i<len3;i++) ch3[len3-1-i] = num3[i] + 48;
ch3[len3] = '\0';
return ch3;
}
int main()
{
int i;
char ch1[MAXCHAR], ch2[MAXCHAR],ch3[MAXCHAR],cc[MAXCHAR];
char * jw(char *ch,int i);
char *cm;
printf("N!,输入N:");
scanf("%s",ch1);
for(i=0;i<strlen(ch1);i++)
{
ch2[i]=ch1[i];
cc[i]='0';
}
cc[strlen(cc)-1]='1';
while(strcmp(ch2,cc)!=0)
{
strcpy(ch2,jw(ch2,1));
strcpy(ch1,MUL(ch1,ch2,ch3));
}
printf("%s",ch1);
return 0;
}
char *jw(char *ch,int i)
{
if(ch[strlen(ch)-i]!='0')
{
ch[strlen(ch)-i]--;
}
else
{
ch[strlen(ch)-i]='9';
jw(ch,i+1);
}
return ch;
}

追问

真心感谢。。。。不过你运行了么?,貌似算不出来啊,什么情况?、

追答

我运行了,没问题的,你运行了吗?通过了没有给个回答。

追问

我运行了啊,没有错误,但是没有结果出来啊。。。什么情况啊

追答

怎么会呀?好用的,我又试过了。你有邮箱吗我发给你。

追问

1419675456@qq.com.....谢了啊

追答

行了没?可以了回个信!其他人的我看了,肯定不行!

第5个回答  2013-01-07
会超出int的表示方法,需要使用数组,进行大数运算追问

那要怎么办啊

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网