51nod 1057 N的阶乘
2017-09-22 00:39
211 查看
1057 N的阶乘
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
输入N求N的阶乘的准确值。
Input
Output
Input示例
Output示例
思路:大数处理的经典思路,将大数划分成N个数组,每个数组的值存的数的长度统一为m,进位为c
最后再进行格式化输出,巧妙的避开了爆数据范围的问题。
#include <stdio.h>
#define _MAX 100000000
int main()
{
int n, i, j, m;
long long a[10000], c;
scanf("%d",&n);
m = 0;
a[0] = 1;
for(i = 1; i <= n; i++)
{
c = 0;
for(j = 0; j <= m; j++)
{
a[j] = a[j] * i + c;
c = a[j] / _MAX;
a[j] %= _MAX;
}
if(c > 0)
{
m++;
a[m] = c;
}
}
printf("%lld", a[m]);
for(i = m - 1; i >= 0; i--)
printf("%0.8lld", a[i]);
printf("\n");
return 0;
}
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
思路:大数处理的经典思路,将大数划分成N个数组,每个数组的值存的数的长度统一为m,进位为c
最后再进行格式化输出,巧妙的避开了爆数据范围的问题。
#include <stdio.h>
#define _MAX 100000000
int main()
{
int n, i, j, m;
long long a[10000], c;
scanf("%d",&n);
m = 0;
a[0] = 1;
for(i = 1; i <= n; i++)
{
c = 0;
for(j = 0; j <= m; j++)
{
a[j] = a[j] * i + c;
c = a[j] / _MAX;
a[j] %= _MAX;
}
if(c > 0)
{
m++;
a[m] = c;
}
}
printf("%lld", a[m]);
for(i = m - 1; i >= 0; i--)
printf("%0.8lld", a[i]);
printf("\n");
return 0;
}
相关文章推荐
- 51Nod 1057 N的阶乘
- 51Nod-1057 N的阶乘
- 51Nod-1057-N的阶乘
- 51nod 1057 N的阶乘(大数-划分)
- 51Nod-1057-N的阶乘
- 51Nod 1057 N的阶乘(数论)
- 51nod 1057 N的阶乘 (水题ing……)
- 51nod 1057 N的阶乘
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 大数阶乘(10000级别) 51Nod 1057
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod_1057 N的阶乘(大数)
- 51Nod 1057 N的阶乘(模拟进制&进位)
- 51NOD 1057 N的阶乘
- 51Nod-1058-N的阶乘的长度
- 51nod_1058 N的阶乘的长度(斯特林公式)
- 51nod-【1003 阶乘后面0的数量】
- 51NOD 1058 N的阶乘的长度