harumakigohan686

CP1042 阶乘的尾数

本想做个小题,没想到牵扯出了大数阶乘(悲

本质上还是极限

俺的做法:

#include <stdio.h>
int change(int m);
int main()
{
	int a[20001];
	int m,u;
	int temp,digit,n,i,j=0;
	int sum=0;
	scanf("%d%d",&n,&m);
	u=m;
	a[0]=1;//从1开始乘
	digit=1;//位数从第一位开始
	for(i=2;i<=n;i++)
	{
		int num=0;
		for(j=0;j<digit;j++)
		{
			temp=a[j]*i+num;//将一个数的每一位数都分别乘以i,
			a[j]=temp%10;//将一个数的每一位数利用数组进行储存
			num=temp/10;
		}
		while(num)//判断退出循环后,num的值是否为0
		{
			a[digit]=num%10;//继续储存
			num=num/10;
			digit++;
		}
	}
    for(i=m-1;i>=0;i--)
    {
		sum+=a[i]*change(u);//重新化为整数类型
		u--;
    }
    printf("%d\n",sum);
	return 0;
}
int change(int u)
{
    int sum=1;
    for(int i=1;i<u;i++)
    {
        sum=sum*10;
    }
    return sum;
}

posted on 2023-01-04 14:38  harumakigohan  阅读(28)  评论(0)    收藏  举报