求实现300!的算法?

来源:百度知道 编辑:UC知道 时间:2024/05/16 12:42:52
如果用的是32位的机子,有没有什么算法能够实现300!?如果没有,相对精度最高的算法是什么?

lg(300!)=lg(1)+lg(2)+...+lg(300)约等于600多,也就是说300!也就600来位数字,可以用数组模拟高精度运算。高精度乘法的代码在下面:
// Multiply a and b to c.
void Mul(int* a, int* b, int* c, int na, int nb, int& nc) {
int i, j;
nc=na+nb;
std::fill(c, c+nc, 0);
for (i=0; i<na; i++)
for (j=0; j<nb; j++) {
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
if (c[nc-1]==0) nc--;
}

肯定是可以精确计算的
不过要自己构造一种数据结构,比如用一个链表,用int存储每一位的数据.自己写一下乘法的算法.

办法是有的,比较烦。
建个大数组(字符型),每次乘以后,把乘的数放进数组。再在数组的基础上实现4则运算。这样就可以实现大数的计算。

#include <stdio.h>
#include <string.h>
typedef struct num
{
int data[10000];
int len;
} NUM;

void jc(NUM* sj, int n)
{
int i = 0, j = 0, temp = 0, inc = 0;
int len = 0;

memset(sj, 0, sizeof(NUM));
sj->data[0] = 1;

for (i = 1; i <= n; i++)
{
for (