c语言求n的阶乘 注意n可能很大阶乘可能会超过整数范围
答案:4 悬赏:0
解决时间 2021-02-17 00:53
- 提问者网友:不懂我就别说我变
- 2021-02-16 00:00
=============
最佳答案
- 二级知识专家网友:厭世為王
- 2021-02-16 00:45
对处理时间有要求?可以尝试预处理,用一个字符串数组(二位char类型数组也可)记录阶乘结果,
char str[200][100] ;//最大计算200! 数字最多100位
在str[0][]=1;
str[1][]=1;
str[2][]=2;
str[3][]=str[2][]*3;
str[4][]=str[3][]*4;.....这样计算就会很快;
然后你要做的是自己写一个大数据乘法,(字符串A 和字符串B 模拟两个数字相乘,如果你写不出来你就网上搜索一下大数据乘法C语言)
char str[200][100] ;//最大计算200! 数字最多100位
在str[0][]=1;
str[1][]=1;
str[2][]=2;
str[3][]=str[2][]*3;
str[4][]=str[3][]*4;.....这样计算就会很快;
然后你要做的是自己写一个大数据乘法,(字符串A 和字符串B 模拟两个数字相乘,如果你写不出来你就网上搜索一下大数据乘法C语言)
全部回答
- 1楼网友:一场云烟
- 2021-02-16 03:45
#include
int main()
{
int num;
printf("input num");
scanf("%d",&num);
int sum=1;
for(int i=1;i<=num;i++)
{
sum=sum*i;
}
printf("%d",sum);
}
- 2楼网友:情窦初殇
- 2021-02-16 02:33
long Fun(int n)
{
if(n==0 || n==1)
{
return 1;
}
return n*Fun(n-1);
}
- 3楼网友:恕我颓废
- 2021-02-16 01:26
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXLINE 20000
typedef struct tag_big_num{
int len;
unsigned int *num;
}bn;
void init(bn *t);
void print(bn *t);
void add(bn *t,char *buf1);
void init(bn *t){
t->len=1;
t->num=(unsigned int *)malloc(MAXLINE*4);
t->num[0]=1;
}
void print(bn *t){
int i=t->len-1;
printf("%d",t->num[i]);
i--;
for(;i>=0;i--){
printf("%08d",t->num[i]);
}
printf("\n");
}
void mul1(bn *t,int x){
int i,p,r;
unsigned long long ll;
for(i=t->len-1;i>=0;i--){
ll=t->num[i]*(long long )x;
p=ll%100000000ll;
r=ll/100000000ll;
t->num[i]=p;
t->num[i+1]+=r;
}
if(t->num[t->len])t->len++;
}
void main(){
bn result;
init(&result);
for(int x=1; x<=10000; x++) {
mul1(&result,x);
}
print(&result);
}
计算10000阶乘
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯