//
// Created by on 9/10/2018.
// 大数阶乘的实现.
//
#include <iostream>
#include <math.h>
void carryme(int bit[],int pos)
{
int i,carrayou = 0;
//
for(i = 0; i <= pos; i++) //
{
bit[i] += carrayou; //
//
if(bit[i] <= 9) //
//
carrayou = 0;
else if(bit[i] > 9 && i < pos) //
{
//
carrayou = bit[i]/10; //
//
bit[i] = bit[i]%10; //
}
//
else if(bit[i] > 9 && i >= pos) //
{
//
while(bit[i] > 9) //
{
//
carrayou = bit[i]/10; //
//
bit[i] = bit[i]%10; //
//
i++;
//
bit[i] = carrayou;
}
}
}
}
int BigBigDataDataFactorial()
{
int num,pos,digital,i,j;
//
double sum = 0;
//
int *fact;
//
scanf("%d",&num);
for(i = 1; i <= num; i++)
sum += log10(i);
//
digital = (int)sum + 1;
//
if(!(fact = (int*)malloc((digital+1)*sizeof(int))))
{
//
return 0;
}
//
for(i = 0; i <= digital; i++)
fact[i] = 0;
fact[0] = 1;
//
for(i = 2; i <= num; i++)
{
//
for(j = digital; j >= 0; j--)
{
//
if(fact[j] != 0)
{
pos = j;
break;
//
}
}
for(j = 0; j <= pos; j++)
fact[j] *= i;
carryme(fact,pos);
}
//
for(j = digital; j >= 0; j--)
if(fact[j] != 0)
{
pos = j;
break;
}
int res=0;
//
for(i = pos; i >= 0; i--)
{
res += fact[i];
}
//
printf("%d",res);
return 1;
}
int main()
{
BigBigDataDataFactorial();
}
【算法】大数阶乘的实现。读入一个自然数N,将N的阶乘结果数值的每一位数字相加,返回相加之和。
猜你喜欢
转载自blog.csdn.net/weixin_32820767/article/details/82587371
今日推荐
周排行