本想做个小题,没想到牵扯出了大数阶乘(悲
本质上还是极限
俺的做法:
#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;
}
标签:digit,尾数,sum,int,CP1042,阶乘,change
From: https://www.cnblogs.com/harumakigohan686/p/17024778.html