您的位置:首页 > 其它

NYOJ 28-大数阶乘

2013-07-26 08:32 218 查看
点击打开链接


大数阶乘

时间限制:3000 ms  |  内存限制:65535 KB
难度:3

描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

输入输入一个整数m(0<m<=5000)
输出输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50


样例输出
30414093201713378043612608166064768844377641568960512000000000000


我整理的第一个大数题,没什么太大的难度,模拟手算的过程,每次乘法都是先把每位都乘这个数,然后记录在当前的位置,最后都乘完了在循环一次一起进位.

#include<stdio.h>
int main()
{
int large_num[16326] = {1};
int num , zero = 0;
int i , j , k , n;
int top;

scanf("%d" , &num);
for(i = 2 , top = 1 ; i <= num ; i++)
{
k = i;
while(k % 10 == 0)
{
k /= 10;
zero ++;
}
for(j = 0 ; j < top ; j++)
{
large_num[j] *= k;
}

for(n = 0 ; ; n++)
{
large_num[n + 1] += large_num
/ 10;
large_num
%= 10;
if(n + 1 == top )
{
if(large_num[n + 1] != 0)
{
top ++;
}
else
break;
}
}
}
for(i = top -1 ; i >= 0 ; i--)
printf("%d" , large_num[i]);
for(i = 0 ; i < zero ; i++)
printf("0");
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: