黑马程序员——求1000!的结果中包含多少个0

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>

代码实现:

public class Test9 {
	public static void main(String[] args){
		//定义一个数组,用来存储1000!的结果
		int a[] = new int[4000];
		
		//给数组初始化,由于1000!结果的每一位必然是大于0的正整数,所以初始化是用-1利于区分
		for(int i=0; i<4000; i++){
			a[i] = -1;
		}
		
		//给出初始值
		a[0] = 1;
		
		//两层循环来模拟乘法
		for(int i=2; i<=1000; i++){
			//用数组模拟乘法
			for(int j=0; j<4000; j++){
				//当该下标等于-1时 表示乘法进位没有达到该位置
				if(a[j] == -1){
					break;
				}
				a[j] = i*j;
			}
			
			//处理进位问题
			for(int k=0; k<4000-3; k++){
				if(a[k] == -1){
					break;
				}
				//由于最大是个位数乘以千位数得到的结果做大也是一个千位的数
				int thousands = a[k]/1000 ;
				int hundreds = a[k]%1000/10;
				int tens = a[k]%100/10;
				int units = a[k]%10;
				
				a[k] = units;
				
				//十位进位
				if(a[k+1] == -1){
					a[k+1] = tens;
				}else{
					a[k+1] += tens;
				}
				
				//百位进位
				if(a[k+2] == -1){
					a[k+2] = hundreds;
				}else{
					a[k+2] += hundreds; 
				}
				
				//千位进位
				if(a[k+3] == -1){
					a[k+3] = thousands;
				}else{
					a[k+3] += thousands;
				}
			}
		}
		
		//定义变量统计结果中0的个数
		int count = 0;
		
		//循环整个数组,统计0的个数
		for(int i=0; i<4000; i++){
			if(a[i] == -1){
				break;
			}
			
			if(a[i] == 0){
				count++;
			}
		}
		
		System.out.println("1000!的零的个数是:" + count);
	}
}

 <a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


猜你喜欢

转载自blog.csdn.net/a1106900429/article/details/40025005
今日推荐