1 //利用数组来分别存储,精确计算100!的阶乘,这样一个比较大的运算。 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 cout<<" ##这个程序是输出100!精确值## "<<endl; 7 int sz[30]; 8 sz[0]=1; 9 for(int j=1;j<30;j++) 10 sz[j]=0; //初始化数组 11 int i,n=100; 12 double a=1.0; 13 for(int i=1;i<=n;i++) 14 a=a*i; cout<<"非常不精确的值"<<a<<endl; 15 for(i=n;i>0;i--) 16 { 17 for(int j=0;j<30;j++) 18 { 19 sz[j]=sz[j]*i; 20 if(sz[j]>=10000000) //sz[j]存储七位数,多了就向前进位,相当于是一千万进制的运算 21 { 22 sz[j+1]=sz[j+1]+int(sz[j]/10000000); 23 sz[j]=sz[j]%10000000; 24 } 25 } 26 } 27 for(int j=29;j>=0;j--) 28 { 29 if(sz[j]==0) 30 cout<<"0000000"; 31 else 32 cout<<sz[j]; 33 } 34 cout<<endl; 35 return 0; 36 }
以上是我实现的代码,代码部分可以正确运行,但是感觉误差有点大,算法本身参考了http://zhidao.baidu.com/link?url=kRiMdjRZ7YVoJtWhNMhDcKgVZjseNMJze918Ps2wLvF20R8IyiKO2XAwl1IVcm3CwSupVEsjVivFM0lkWnFLYa
这篇代码,请高手指正这个代码到底是正确还是错误的,或者错在哪里
补充:代码在VS2012上运行无误,可以直接COPY运行,测试我做了n<=11的测试(因为我只会精确求解11!,再大就不会了),都是对的!
如果有关于求解精度方面的指导教程什么的,请不吝发链接,谢谢!