C语言 10000的阶乘 只用while/for

来源:百度知道 编辑:UC知道 时间:2024/05/18 05:14:41
只用do while/while/for输出10000的阶乘~~~因为我们现在只学到这里,所以老师出这道题应该就不需要用到后面的知识~~比方说什么递归啊之类的我就不晓得是什么~~~我想就是要解决溢出的问题,但是无论是哪个变量都装不下这么大的数啊~~~所以没办法啦只好让大家帮忙...
附:我目前做的:#include <stdio.h>
int main()
{
float double product=1;
int n=1;
while (n<=100)
{product=product*n;
n++;}
printf("%f\n",product);
}

原来的题目是想要计算10000!的结果还是有什么其他的,比如计算0的个数之类。这样单用变量是死定了的,没有那么大的变量。
连递归都没学就研究大数计算,是不是难点啊?

需要自己定义数据结构,因为结果早已超出整形范围。采用字符数组保存,这样的话还要自己设计算法,包括乘法进位之类的,只用for/while根本不行 你在看看题吧 要是研究生或以上的那这个思路肯定没问题,要是只是一般本科专科或技巧练习那就是这道题出错了。

这样肯定不行,自己写个大整数相乘的库巴,利用字符串来进行乘法的运算。
网上有很多这样的程序,自己baidu一下巴。

我的想法就是有1开始增加,然后当积达到某一极限后,进行存储,然后再乘,如此递归下去,最后将结果连接起来

用char[]

这个要用数组模拟,具体实现如下

#include<stdio.h>

#define MAX 36000 //10000的阶乘不会超过36000位

int a[MAX+1];

int main()
{
int n, sum = 0, j, i, k, x;

scanf("%d",&n); //计算n的阶乘
k = MAX;
a[MAX] = 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 /= 10;
}
}
for(i=k; i<=MAX; i++)
{
printf("%d",a[i]);
}
printf("\n");