题目描述
4岁的阿尔和6岁的爱德华是两兄弟,从小就对炼金术很有兴趣。一天,阿尔看到哥哥在算乘法,阿尔看了觉得很新奇,怎么哥哥计算出来的结果后面那么多圈圈,原来这是他们温柔的妈妈安排爱德华做的一道数学题,要他计算从a到b所有整数的乘积。妈妈看到阿尔看得那么入神,也想考验一下阿尔,对阿尔说:“你能数出哥哥计算的结果末尾的0有多少个吗?”,聪明的阿尔把计算结果看了1秒很快就把正确答案告诉妈妈,你也能和阿尔一样聪明吗?输入两个正整数a和b,求a到b之间(包含a、b)所有整数的积末尾有多少个0。
输入
【输入格式】
一行,分别表示a和b
输出
【输出格式】
一行,0的个数
样例输入
1 10
样例输出
2
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int sum=0,num=0,num2=0;//sum:含5的累加器;num与num2分别赋i,以防冲突
int even=0;//计算有多少个偶数;
for(int i=a;i<=b;i++) {
num=i;
num2=i;
while(num%5==0) //num取模为0时
{
sum++;
num/=5;
if(num==0) {
break;
}
}
while(num2%2==0) //num2取模为0时
{
even++;
num2/=2;
if(num2==0) {
break;
}
}
}
if(even >= sum)//偶数的累加器个数比含5的累加器大我们就输出输出含5的累加次数,反之偶数类加的次数。
{
System.out.print(sum);
}
else
{
System.out.print(even);
}
}
}
分析:
- 求a*2*3*4....*b;
- 求5的个数,因为任意偶数乘5都的10
- 如过n=25时,1-10有2个0,11-20也有2个0。但19-25也有2个,因为5*5=25
- 求偶数的个数,如果a=255,b=256的的话,a*b=15,750,只有一个0,所以我们算偶数的个数。
- 为什么是偶数?比如说1~5之间(包含5),2与4为偶数,而5有1个。所以偶数的个数比含5的大我们就输出偶数类加的次数,反之输出含5的累加次数。
运行结果
总结:
其实这题主要求的是5的个数,还有偶数的个数,并且累加,还得注意5*5==25的这种类型,还有a=255,b=256这种类型。
如果还有其他的写法还可以在下方留言QWQ