Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
输入
One N in one line, process to the end of file.
输出
For each N, output N! in one line.
样例输入
1
2
3
样例输出
1
2
6
#include "stdio.h"
#define max 32767
int main()
{
int n;
int sum0 = 0;
int a[max+1];
int i,j,k,x;
while (scanf ( "%d", &n )!=EOF)
{
k=max;
a[k]=1;
for(i=2;i<=n;i++)
{
x=0;
for(j=max;j>=k;j--)
{
x=a[j]*i+x;
a[j]=x%10;
x=x/10;
}
while(x>0)
{
k--;
a[k]=x%10;
x=x/10;
}
}
// 输出
for(i=k; i<= max;i++)
{
printf( "%d", a[i] );
}
printf( "\n" );
}
return 0;
}
这个程序溢出
已经改了%lu,还是不行
n!大数求解,C语言
答案:4 悬赏:0 手机版
解决时间 2021-02-05 08:13
- 提问者网友:我是女神我骄傲
- 2021-02-04 11:27
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-02-04 11:37
a里面每一个位置只存十进制的一个数字, 10000!的话, int a[max+1];应该存不下.
全部回答
- 1楼网友:由着我着迷
- 2021-02-04 15:19
#include<stdio.h>
#define len 10 //这里改数组的长度就可以了;
long max(long *, int len); //该函数用以比较所有数的大小,并返回最大数;
int main(void)
{
long num[len] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
long imax;
imax = max(num, len);
printf("%ld", imax);
return 0;
}
long max(long num[], int len)
{
long max = num[0];
int i;
for (i= 0; i < len; i++)
{
if (max < num[i])
max = num[i];
}
return max;
}
- 2楼网友:风格不统一
- 2021-02-04 14:35
把类型改成unsigned long型,而且如果输入1000那么输出应该有2000多位,你做这么大的阶乘不用于专业运算没有意义。
- 3楼网友:孤老序
- 2021-02-04 13:06
定义的类型应该是 unsigned long 输出是%lu
你定义类型也改了???要不你直接问我吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯