|
#include "stdio.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int carry,n,j;
int a[2000];
int digit=1;
int temp,i;
cout<<"please enter n:"<<endl;
cin>>n;
a[0]=1;
for(i=2; i<=n; i++)
{
for(carry=0,j=1; j<=digit; ++j)
{
temp=a[j-1]*i+carry;
a[j-1]=temp%10;
carry=temp/10;
}
while(carry)
{
//digit++;
a[++digit-1]=carry%10;
carry/=10;
}
}
cout<<"the result is:"<<endl;
for(int k=digit; k>=1; --k)
cout<<a[k-1];
cout<<endl;
return 0;
}
这代码求的是大数的阶乘,就是LONG DOUBLE 都放不下的那种。 但我始终没有看明白,想请大家告诉一下思路是怎么样的。 谢谢
PS: 红色的地方我有疑问 ++ 在减1 不等于白加吗 可为什么出来的答案却不一样了? |
|