32位编译器和64位编译器数据字节数(一个字节=8位)
编译器
int类型:4个字节32位(48),寻址空间为232,数据范围-231~2^31
long long类型:是一种超长整型,8字节64位(88),寻址空间为264数据范围-263~2^63
题目描述:
设计一个算法,计算出n阶乘中尾部零的个数
样例:11!=39916800,因此返回2
分析:
数字n的阶乘能够分解为素数幂的乘积,既n!=2x*3y.……5^z…
显然,2*5=10产生一个0,且2的个数大于5的个数既x>z,本题既求z的大小
1到n中5的倍数有5,10,15,20,25,30…50…,n/5为n中能被5整除的数的个数
5^2=25提供2个5,1到n中25的倍数有25,50,75,100……,n/25为n中能被5*5整除的数的个数,是25的倍数一定是5的倍数并在第一次查询时已经提供了一个5,因此在第二次查询时可以再提供(2-1)一个5
5^3=125提供3个5,1到n中125的倍数有125,250,……,n/125为n中能被125整除的数的个数,是125的倍数一定是5和25的倍数,在上两次查询时已经提供了2个5,因此在第3次查询是可以在提供(3-2)一个5
以此类推,z=n/5+n/(52)+n/(53)……直到n/(5^a)<0
代码如下:
long long trailingZeros(long long n){
long long num;
while(n)
{
num+=n/5;
n/=5;
}
return num;
}
当condition为任意非零值时,既条件为真时,一直执行目标语句。
while(condition){
statement(s);
}