/*此题关键部分在于进位的处理,以及结果的输出。重点留意code的第15-18行 21-23行 */ #include<stdio.h>#include<string.h>int main(){ int R[3000];//储存结果的数组 int n,i,j; int num; memset(R,0,sizeof(R));//先将结果数组全部赋值为0 scanf("%d",&n); R[0]=1;//第一位表示个位 num=1;//表示当前保存结果的数组中有效的位数 for(i=2;i<=n;i++){ int c=0;//c表示进位,初始化为0 for(j=0;j<3000;j++){ int s=R[j]*i+c;//s暂时储存结果,由进位和当前位乘积相加得到 R[j]=s%10;//去除十位数字,保留个位数字 c=s/10;//求进位 } } for(i=2999;i>=0;i--) if(R[i]) break;//去除结果数组前面无效的0部分 for(j=i;j>=0;j--) PRintf("%d",R[j]);//由高到低输出结果 printf("/n"); return 0;}
新闻热点
疑难解答