100阶乘或更大的数据量问题的解决 最近,我在一个程序里用到阶乘,需要在一个Edit Box中显示用户所输入的整数的阶乘结果。但是后来发现VC中的数据类型不支持(也许我还没用到支持的数据类型),但是在为Edit Box连接变量时,发现没用支持大数据的数据类型,但是我后来在使用windows自带的计算器时,发现无论计算多大的整数的阶乘,计算器都可以计算出来,所以,现在我想问一下各位,如何实现我描述的计算大数据的阶乘的问题?请不吝赐教,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 __int64只能解决一部分问题,如果再大点,还是无法解决的,所以,这样的问题,还是要使用算法+字符串来解决,字符串的长度几乎是无限的。我只能提供思路,具体如何解决,有答案了别忘了告诉我一声。 弱弱的提一句,你一定要用整型表示吗,c++中可表示的最大范围的数据类型是长双精度型(long double),它可以表示的数量级是10的4932次方,双精度(double)的数量级是10的308次方,而100的阶乘是10的157次方,这两种数据类型应该都可以满足要求的,如果要显示成整型,可以转成字串来显示。 看看这个吧 :blog.csdn.net/liangbch 其实在C下可以直接操作一段内存地址阿没必要用Str表示高精度的如果在VB或Delphi可以用Str其实用什么都是一样的,用什么数据类型都是一个指针,指向某个内存地址只要你写好高精度算法,那么数据结构就不是问题。 贴个代码罢#include <stdio.h>#include <stdlib.h>#include <string.h>int main( void ){ int n, i, j, len, g, t, zero; static unsigned int a[10000]; memset(a, 0, 40000); a[0]=1;len=1; zero=0; scanf("%d", &n); for(i=2; i<=n; i++){ for(j=zero,g=0; j<len; j++){ t=a[j]*i+g; g=t/10000; t=t%10000; a[j]=t; if((!t)&&(j-zero==1)) ++zero; } while(g){ a[len++]=g%10000; g/=10000; } } while(!a[len]) len--; printf("%d", a[len--]); while(len>=0) printf("%04d", a[len--]); return 0;} 回调函数中AfxGetMainWnd()失效!请教高人! 一个Activex控件注册问题 内存释放问题求救!!!! 有没有其他软件开发BBS,请告知,越多越好? 急问:如何得到窗口的背景颜色啊? 请问如何通过程序启动WORD显示WORD文档? vc 做 service 有没有比较好的调试方式,另外还有哪些要注意的地方? 在char类型的内存(保存二进制文件)中查找16进制的字(2byte) 请问,怎么切分sdi?在onCreateClient()函数中,应该加入什么?能否详细回答? API替换函数中弹出对话框shift1 图形处理 Word有一个画图的工具栏,不知能否拿来在个人的程序中使用
我只能提供思路,具体如何解决,有答案了别忘了告诉我一声。
没必要用Str表示高精度的
如果在VB或Delphi可以用Str
其实用什么都是一样的,用什么数据类型都是一个指针,指向某个内存地址
只要你写好高精度算法,那么数据结构就不是问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void ){
int n, i, j, len, g, t, zero;
static unsigned int a[10000];
memset(a, 0, 40000);
a[0]=1;len=1; zero=0;
scanf("%d", &n);
for(i=2; i<=n; i++){
for(j=zero,g=0; j<len; j++){
t=a[j]*i+g;
g=t/10000;
t=t%10000;
a[j]=t;
if((!t)&&(j-zero==1)) ++zero;
}
while(g){
a[len++]=g%10000;
g/=10000;
}
}
while(!a[len]) len--;
printf("%d", a[len--]);
while(len>=0) printf("%04d", a[len--]);
return 0;}