永发信息网

n!大数求解,C语言

答案:4  悬赏:0  手机版
解决时间 2021-02-05 08:13
  • 提问者网友:我是女神我骄傲
  • 2021-02-04 11:27
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,还是不行
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 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 你定义类型也改了???要不你直接问我吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯