您的位置:首页 > 其它

大数运算-Tsinsen A1089.阶乘计算

2017-02-13 11:26 295 查看
输入一个正整数n,输出n!的值

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法

#include <cstdio>
#include <cstring>
#include <iostream>
#define maxSize 3000
using namespace std;

int main() {
int a[maxSize];//再小测试点会越界【1000!位数大致在2570左右】
memset(a, 0, sizeof(a));
int n, s, r = 0, index = 0;//index记录当前和的位数
cin >> n;

a[0] = 1;
for (int k = 2; k <= n; k++) {
for (int i = 0; i <= index; i++) {
s = a[i] * k + r;//相乘+进位
a[i] = s % 10;//每一位的运算结果
r = s / 10;//进位
}
while (r != 0) {//最高进位
a[++index] = r % 10;
r = r / 10;
}
}
for (int i = index; i >= 0; i--)//倒序输出
printf("%d", a[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: