您的位置:首页 > 其它

阶乘统计0个数 算法

2016-01-24 17:18 288 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void calculate(int a[] , const int num );  //计算每一步的阶乘

int len = 1;

int main(void)
{

int *a;

int n  = 0;

while(n>10000 ||n < 1000)
{
printf("please input number n between 1000 and 10000: ");
scanf("%d",&n);
}

a = (int *)malloc(sizeof(int)*n*4);
if(a == NULL)
{
exit(-1);
}

memset(a,0,n);
a[0] = 1 ;

for(int i = 1 ; i <= n ; i++)  //通过数组计算n!
{
calculate(a , i ) ;
}

int count = 0;
while(a[count] == 0)
{
count++;
}//统计个数零

printf("the result is :  %d\n",count);

return 0;
}

void calculate(int a[]  , const int num )
{

int result = 0;       // 乘积结果
int remainder = 0 ;   // 余数
int carry = 0;        // 进位

for(int i = 0 ; i < len ; ++i)
{

result =  a[i]*num + carry;

a[i] = result%10;
carry = result/10;
}

if(carry!=0)  //如果进位不为零,从低位到高位依次存储
{
while(carry/10 != 0)
{
a[len] = carry%10;
carry = carry/10;
len++;
}

a[len++] = carry;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: