求救!!!!!!!!!!!!!!!!!!
请问10000的阶乘的算法.
主要就是乘完之后没有哪一种类型的数据来存贮.
请各位大虾们帮帮小弟.
小弟不胜感激.
有结果可发给小弟.twtmnm1314@163.com
问题点数:0、回复次数:11Top
1 楼0738111080(爱)回复于 2003-06-04 12:46:55 得分 0
发我一份了
07738111080@163.comTop
2 楼flab_lwq()回复于 2003-06-04 12:57:04 得分 0
可以用链表啊,也可以用数组
比如20!=2432902008176640000
可以用一个int类型的数组存储:a[0]=0000, a[1]=7664, a[2]=81, a[3]=2902, a[4]=243Top
3 楼spiderbat(spdier)回复于 2003-06-04 13:10:46 得分 0
这做起来可麻烦了,是不是参加程序设计比赛呀,你可以自己定义一个结构然后用链表聊起来,具体对它的操作就麻烦了,这小弟也不会了!不过结构是这样的:
struct number {
int data;
struct number *next;
}
入过那位有好的方案请告诉小弟一声,不胜感激!:)还给分!Top
4 楼three1103(扬华)回复于 2003-06-04 13:17:27 得分 0
也发我一份了:three1103@sina.com
Top
5 楼shenyiwen(沈亦文)回复于 2003-06-04 13:18:52 得分 0
任意精度运算,考得就是这个。Top
6 楼greatzhum(纯净水)回复于 2003-06-04 13:33:26 得分 0
我也想知道!!!
---------------------------------------------------------------------------------
回复人: flab_lwq() ( ) 信誉:100 2003-06-04 12:57:00 得分:0
可以用链表啊,也可以用数组
比如20!=2432902008176640000
可以用一个int类型的数组存储:a[0]=0000, a[1]=7664, a[2]=81, a[3]=2902, a[4]=243
---------------------------------------------------------------------------------
请问:flab_lwq(),你怎样把那么大的一个数拆分后放入数组? “2432902008176640000”这么大的数可以用double型,有效数字也够,但是如果更大呢?怎么把它拆分呢?希望不啻吝教。我也在做这方面的东西。
Top
7 楼sxbobo2002(五月雪)回复于 2003-06-04 13:35:49 得分 0
可以用高精度
或者分块存储如flab_lwq() 所说.Top
8 楼cnxiaohai(相声独一处(回归,为了编程,为了C,为了CSDN))回复于 2003-06-04 16:18:12 得分 0
要是算末尾有几个0我会
呵呵
这个吗?
还是听听各位大哥的。
有代码吗?
来一个看看~~~~~~~~~~~~~~~~~~~~~~~~~~~Top
9 楼flab_lwq()回复于 2003-06-04 16:53:32 得分 0
抛砖引玉
#include <iostream.h>
int main()
{
const int MAXSIZE = 30000;
const int STORAGE = 10000;
long a[MAXSIZE];
int i, num;
unsigned long result, carrier = 0;
cout << "pls input the number: " << flush;
cin >> num;
//init the stored data array
for(i = 0; i < MAXSIZE; i++) a[i] = -1;
a[0] = 1;
i = 0;
do {
//go to head of stored data array
i = 0;
while(a[i] != -1) {
result = num * a[i] + carrier;
carrier = result / STORAGE;
a[i++] = result % STORAGE;
}
//if carry occur, operate it
while(carrier != 0) {
a[i++] = carrier % STORAGE;
carrier /= STORAGE;
}
}while(--num > 1);
//输出最高位的一组数字
cout << a[--i] << ' ';
for(i--; i >= 0; i--) {
//保证每个数组输出都为4位,不够位数的补0,很苯的方法
if(a[i] > 1000);
else if(a[i] > 100) cout << "0";
else if(a[i] > 10) cout << "00";
else cout << "000";
cout << a[i] << ' ';
}
}
Top
10 楼HEROWANG(让你望见影子的墙)回复于 2003-06-04 17:59:25 得分 0
我有一个想法:不知可行不可行,刚想出来的,没试过的!
先做一个数据类型和字符类型相互转化的类,然后把乘积乘字符串型的,
那么无论成绩有多么大,字符串都可以方的下的。要输出结果时,只要输入
这个字符串就行了。
不知大家一位如何哪?如果谁有这个想法,或者作出接过来,麻烦通知我一下的!Top
11 楼flytercel(天涯飞鹰)回复于 2003-06-04 19:28:03 得分 0
可不可以用数组,比如用一个一维数组(要足够大),然后象小学学的那样用算式乘法计算,要进位就加到它的前一位,我想是应该可以实现的,不过还没有实验,Top




