大数阶乘问题

int   - 2147483648~2147483647
long long:-9223372036854775808~9223372036854775807

unsigned   int   0~4294967295  

unsigned long 0~4294967295
unsigned long long:0~1844674407370955161

而20!(2,432,902,008,176,640,000)就已超过了unsigned long long的上限,10000的阶乘结果为35660位,因此常规的类型变量无法保存我们想要得到的大数阶乘值的,那怎么解决呢?

用数组! int result[int]足矣。别的不多讲了,上代码

<textarea cols="50" rows="15" name="code" class="cpp">/* author:m_nValue time:28/03/2011 email:[email protected] */ #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;fstream&gt; #define N 10000 //10000! using namespace std; int *Multi(int *num1, int&amp; size1, int *num2, int size2); bool NextNum2(int *num2,int size2); int main() { int num1[5]={1,0,0,0,0};//N int num2[5]={0,9,9,9,9};//N-1 int size1=5;//num1的初始大小 int *bufR; bufR=Multi(num1,size1,num2,5); for(int i=1;i&lt;N-1;i++) { if(!NextNum2(num2,5)) break; bufR=Multi(bufR,size1,num2,5); } fstream ifs(&quot;result.txt&quot;,ios::out);//结果导出到文本文件 for(int i=0;i&lt;size1;i++) { cout&lt;&lt;bufR[i]; ifs&lt;&lt;bufR[i]; } ifs.close(); cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;总共:&quot;&lt;&lt;size1&lt;&lt;endl; system(&quot;pause&quot;); return 0; } int *Multi(int *num1, int&amp; size1, int *num2, int size2) { int size=size1+size2; int *pResult=new int[size]; memset(pResult,0,size*sizeof(int)); int count=-1,k,i=0,j=0; for(i=size2-1;i&gt;=0;i--) { count++; k=count; for(j=size1-1;j&gt;=0;j--) pResult[k++]+=num2[i]*num1[j]; } for(i=0;i&lt;size;i++) { if(pResult[i]&gt;=10) { pResult[i+1]+=pResult[i]/10; pResult[i]%=10; } } j=0; for(i=size-1;i&gt;=0;i--) { if(pResult[i]==0) continue; else { size1=i+1; break; } } int *temp=new int[size1]; for(i=size1-1;i&gt;=0;i--) temp[j++]=pResult[i]; delete []pResult; return temp; } bool NextNum2(int *num2,int size2) { int nextNum=0; for(int i=0;i&lt;size2;i++) { nextNum+=num2[i]*(int)pow(10.0,(size2-i-1)); } if(nextNum&lt;=1) return false; nextNum-=1; for(int i=0;i&lt;size2;i++) { num2[i]=nextNum/(int)pow(10.0,size2-i-1); nextNum%=(int)pow(10.0,size2-i-1); } return true; }</textarea>

 

你可能感兴趣的:(ios,delete,email)