#include <cstdlib>
#include <iostream>
using namespace std;
int resultArr[36000];
int main(int argc, char *argv[])
{
int length,positionNow,numberEnter;
while(cin>>numberEnter){
resultArr[0]=1;
length=1;
while(numberEnter){
//将结果数组的每一位都乘以当前数
for(positionNow=0;positionNow<length;positionNow++){
resultArr[positionNow]*=numberEnter;
}
//数组进位
for(positionNow=0;positionNow<length;positionNow++){
if(resultArr[positionNow]>=10 && positionNow!=length-1){
resultArr[positionNow+1]+=resultArr[positionNow]/10;
resultArr[positionNow]%=10;
}else if(resultArr[positionNow]>=10 && positionNow==length-1){
resultArr[length]=0;
resultArr[length]+=resultArr[positionNow]/10;
resultArr[positionNow]%=10;
length+=1;
}
}
numberEnter--;
}
for(positionNow=length-1;positionNow>=0;positionNow--){
cout<<resultArr[positionNow];
}
cout<<"\n";
}
//system("PAUSE");
return EXIT_SUCCESS;
}
新的开端,以后坚持在杭电上刷题,写结题报告。
杭电1042 ,第一次过。
思路:
大数问题,数组模拟解决,将结果保存在数组中。将N值递减,每次都与数组当中的每一位想乘,乘法计算之后,顺次将数组当中的数进位。