HDOJ 1042 N! -- 大数运算
发布时间:2020-12-14 03:42:35 所属栏目:大数据 来源:网络整理
导读:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1042 Problem Description Given an integer N(0 ≤ N ≤ 10000),your task is to calculate N! ? Input One N in one line,process to the end of file. ? Output For each N,output N! in one line.
|
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1042
Problem Description
Given an integer N(0 ≤ N ≤ 10000),your task is to calculate N!
?
Input
One N in one line,process to the end of file.
?
Output
For each N,output N! in one line.
?
Sample Input
?
Sample Output
#include <stdio.h>
#include <string.h>
/* 一个数组元素表示 4 个十进制位,即数组是万进制的 */
#define BIG_RADIX 10000
#define RADIX_LEN 4
/* 10000! 有 35660 位 */
#define MAX_LEN (35660/RADIX_LEN + 1)
int x[MAX_LEN + 1];
void Big_Print(){
int i;
int start_output = 0;//用于跳过多余的0
for (i = MAX_LEN; i >= 0; --i){
if (start_output == 1){//如果多余的0已经跳过,则输出
printf("%04d",x[i]);
}
else if (x[i] > 0){//表示多余的0已经跳过
printf("%d",x[i]);
start_output = 1;
}
}
if (start_output == 0)//如果全为0
printf("0");
}
void Big_Multiple(int y){
int i;
int carry = 0;//保存进位
int tmp;
for (i = 0; i < MAX_LEN; ++i){
tmp = x[i] * y + carry;
x[i] = tmp % BIG_RADIX;
carry = tmp / BIG_RADIX;
}
}
void Big_Factorial(int N){
int i;
memset(x,sizeof(x));
x[0] = 1;
for (i = 2; i <= N; ++i){
Big_Multiple(i);
}
}
int main(void){
int N;
while (scanf("%d",&N) != EOF){
Big_Factorial(N);
Big_Print();
printf("n");
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
