用大数模板,加法转乘法超时了,然后用二进制压缩又失败了。。
最后用与1250类似的办法拼凑
#include <iostream>
using namespace std;
int num[8000];
int main()
{
int i , j, n, t , carry;
while(scanf("%d", &n)!= EOF)
{
if (n == 0)
{
printf("1\n");
continue;
}
memset(num, 0, sizeof(num));
t = 1; //位数
num[1] = 1;
for (i = 2 ; i <= n; i++)
{
carry = 0;
for (j = 1; j <= t; j++)
{
num[j] = num[j] * i + carry;
carry = num[j] / 100000;
num[j] = num[j] % 100000;
}
while (carry) //进位使得位数增加
{
t++;
num[t] = carry % 100000;
carry /= 100000;
}
}
printf("%d", num[t]);
for (i = t - 1; i >= 1; i--)
{
printf("%05d", num[i]); //格式化输出, 补前导0
}
printf("\n");
}
return 0;
}

本文介绍了一种使用数组实现的大数乘法算法,并通过不断累加实现了大数的乘法操作。该方法首先初始化一个数组用于存放每一位上的数字,然后通过循环进行乘法和进位处理,最终输出格式化后的结果。

被折叠的 条评论
为什么被折叠?



