阶乘计算升级版
程序员文章站
2022-03-13 13:47:58
...
备注:注意输出结果可能超32位整型。
这道题是想让我们使用字符串数组来存储计算结果,关键是要理解透彻手动计算两数相乘的过程。
代码如下:
//求阶乘
#include<stdio.h>
void jiecheng(int N)
{
//需要使用字符串数组进行存储
int num[3001]={0};
num[0]=1;//假设初始结果位数为1
int n=0;//n表示进位
int tem;//tem用来存储临时结果
int k=1;//k用来存储结果位数
int i,j;
for(i=2;i<=N;i++)//遍历被乘数
{
for(j=0;j<k;j++)//每一个数都要和结果的每一位的数相乘
{
tem=num[j]*i+n;//相乘后的结果
num[j]=tem%10;//本位余数
n=tem/10;//进位
}
while(n!=0)//若和最后一个结果位数相乘后仍有进位,结果位数应该增加
{
num[k++]=n%10;//增加结果位数,并赋值
n/=10;
}
}
//将结果位数输出
for(i=k-1;i>=0;i--)//逆序输出字符串数组,就是最终结果
{
printf("%d",num[i]);
}
printf("\n");
}
int main()
{
int m;
scanf("%d",&m);
int i;
for(i=0;i<m;i++)
{
int n;
scanf("%d",&n);
jiecheng(n);
}
return 0;
}
上一篇: C++选择排序实现
下一篇: 一道时间复杂度算法题