linuxC学习第八天

今天由于需要解决一些生活和学习上的琐事,只进行了3个简单程序的理解学习

一、计算最大约数

这个程序比较简单只需要对这个数从大到小每一个数进行判断是否能除尽,取出最大的数就可以了,注意一些数可能超出int的范围,可以用long定义

#include <stdio.h>

int main()
{
	long a;
	int i;
	
	printf("请输入数字\n");
	scanf("%ld",&a);
	
	for(i=999;i>=100;i--)
	{
		if(a%i==0)
		{
			printf("在%ld中最大的三位数是:%d\n",a,i);
			break;
		}
	}
	
	return 0;
}

二、求13*13次方的最后3个尾数

这也是一个简单的程序只有将结果对1000取余数就可以了

#include <stdio.h>

int main()
{
	int i,x,y,last=1;
	printf("INPUT X and Y\n");
	scanf("%d%d",&x,&y);

	for(i=0;i<y;i++)
	{
		last=(last * x)%1000;
	}
	
	printf("THE last 3 digis of %d^%d = %d\n",x,y,last);
	
	return 0;
}

三、求阶乘尾数0的个数

1、10!末尾0的个数

#include <stdio.h>

int main()
{
    int a,c,count=0;

    for(a=5;a<11;a+=5)
    {
        count++;
    }
    
    c=1*2*3*4*5*6*7*8*9*10;
    
    printf("%d,%d\n",count,c);

    return 0;
}

2、100!末尾0的个数

#include <stdio.h>

int main()
{
    int a,count=0;
    for(a=5;a<101;a+=5)
    {
        count++;

        if(!(a%25))
        {
            count++;
        }
    }
    
    printf("The number of 0 in the end of 100! is:%d\n",count);
    
    return 0;
}

3、1000!末尾0的个数

#include <stdio.h>

int main()
{
    int a,count;
    for(a=5;a<1001;a+=5)
    {
        count++;

        if(!(a%25))
        {
            count++;

            if(!(a%125))
            {
                count++;

                if(!(a%625))
                {
                    count++;
                }
            }
        }
    }
   
    printf("The number of 0 in the end of 1000! is:%d\n",count);
            
    return 0;
}

从中可以看出只有计算5、5^2和 5^3的…的值就可以算出末尾0的个数了

4、计算N!末尾0的个数

#include <stdio.h>

int main()
{
    int a,b,N,count=0;
	
	printf("要计算阶乘的数:");
	scanf("%d",&N);
	
    for(a=1;a<N+1;a++)
    {	
		b=a;										//用b来保存a的值,判断b的值与5,25,125....关系
		while(b%5==0)
        {
			count++;
			b/=5;		
		}
    }
   
    printf("The number of 0 in the end of N! is:%d\n",count);
            
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43360263/article/details/84205958