题目:戳这里
思路:
大数问题 但是因为每一位乘的都是不超过int范围的小数,所以是大数乘小数问题
将大数逆序存放在int数组a中,各位依次与乘数相乘,再判断乘完的每一位,若相乘大于十,则与10取余,并进位,进位 加的是除10取整
代码:
#include <cstdio>
#include <cstring>
int main()
{
int n,bit,carry,a[100000];
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));//将大数逆序存放在数组s[]中,并转换成数字
bit=1;
a[0]=1;
for(int i=1; i<=n; i++)
{
for(int j=0; j<bit; j++)
a[j]*=i; //各位依次与乘数相乘
for(int j=0; j<bit; j++)
{
if(a[j]>=10)
{
a[j+1]+=(a[j]/10);
a[j]%=10; //若相乘大于十,则与10取余,并进位
if(j==(bit-1))bit++;
}
}
}
for(int i=(bit-1); i>=0; i--)
printf("%d",a[i]);
printf("\n");
}
}