6-10 阶乘计算升级版 (20分)
程序员文章站
2022-03-04 22:37:34
...
6-10 阶乘计算升级版 (20分)
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N
是用户传入的参数,其值不超过1000。如果N
是非负整数,则该函数必须在一行中打印出N
!的值,否则打印“Invalid input”。
裁判测试程序样例:
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000
图解逻辑:
代码:
//大数乘法
void Print_Factorial ( const int N )
{
//申请一个10000位的整型数组
int a[10000]={0};
//首位置为1
a[0]=1;
int i,j,tmp;
//N为负数,显示Invalid input
if(N<0)
printf("Invalid input");
else{
//乘法
for(i=2;i<=N;i++) //控制被乘数(2-1000)
{
int up=0; //进位
for(j=0;j<10000;j++) //控制数组
{
tmp=a[j]*i+up; //计算当前位置乘积
a[j]=tmp%10;//取余得到当前位置的数
up=tmp/10;//整除10判断是否进位
}
}
//倒序输出
for(i=10000;i>=0;i--) //第一层循环用于找非0数
{
if(a[i]!=0)//一旦找到非零数,开始打印
{
for(i;i>=0;i--) //打印完毕i为负数,会直接跳出次循环和上一层循环,
{
printf("%d",a[i]);
}
}
}
}
}