1000的阶乘?
因为结果产生的数超过的系统定义的长度,所以要变通!!! 我用一个大数组(如数组a[1000])的各个元素来表示结果的一位数,其中a[0]存放当前的结果的位数!!!比如:结果为123456......,(一共70位),那么a[0]=70,a[70]=1, a[69]=2,a[68]=3,a[67]=4......!!!!! 但是我的程序有点问题,哪位帮帮看一下,看那里出现问题!!! (可以用比较小的数试试),我对程序从头用多个实例走了好多遍,都没有问题,但是运行起来就有问题!!!实在找不出!!!! 希望大家帮忙!!谢谢了!!! 代码: #include<iostream> #include<stdlib.h> using namespace std ; int main() { int a[1000]={0} ; //先定义足够大的数组容纳1000阶剩的数 a[0]=a[1]=1 ; //a[0]为当前的位数 int m=0 , t, n , b=0 , l ; //m为低位向高位的进位 for(int j=2 ; j<=1000 ; j++) { n=a[0] ; for(int i=1 ; i<=n ; i++) { a[i] = a[i] * j + m ; if(a[i] > 9) { t = a[i] / 10 ; a[i] = a[i] % 10 ; m = t ; if(i = a[0]) //当到最高位时,则要进行相应的处理! { l = i ; while(m > 9) { l++ ; t = m / 10 ; a[l] = m % 10 ; m = t ; a[0]++ ; } if(m > 0) { l++; a[l] = m ; a[0]++ ; m = 0 ; } } } else m = 0 ; } } cout << "1000的阶乘结果一共需要" << a[0] << "位" << endl ; for(int i=999 ; i>=1 ; i--) //因为1000的阶乘没有1000位,那么前面的都是零,所以就从不为零处输出 { if(a[i] != 0 && b==0) { for(int j=i ; j>=1 ; j--) cout << a[i] ; b = 1 ; } } system("pause") ; } |