| 题目一:求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000 /*我们不能把它们都乘起来得出结果后再去不断%10,因为这个积太大了,我们所学的数据类型根本装不下。那么就从结果去分析:包含多少个0也就意味着看每个数是否能被10整除,或者数的积能否被10整除。%10的等于0的情况有两种:以0结尾的数或者以结尾为2和结尾为5的数的积的值。也就是说我们找到能够%10==0或者%5==0的数,把它们的个数相加即可,之所以不是%2,是因为能够%5的话,肯定之前的所有的数的积能够整除10,而%2却不一定,比如1到10,1*2的积不能够整除10,而1*2*3*4*5的积是可以%10的。也就是说我们这样去写程序,判断每个数是否%10或%5等于0,是的话计数器+1;在判断这个数是否%100等于0,是的话再+1.。。。如此类推。
 */
 class ArithDemo
 {
 public static void main(String[] args)
 {
 System.out.println(numsOfZero(1000));
 }
 
 public static int numsOfZero(int num)
 {
 int x=1,count=0;
 while(x<=num)
 {
 if(x%10==0 || x%5==0) count++;
 if(x%100==0) count++;
 if(x%1000==0) count++;
 x++;
 }
 return count;
 }
 }
 题目二:
 /*
 需求:用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?
 */
 
 class  TryFinallyDemo
 {
 public static void main(String[] args)
 {
 System.out.println(returnValue1());                //返回30
 System.out.println(returnValue2());                //返回20
 System.out.println(returnValue3());                //返回20
 System.out.println(returnValue4());                //返回30
 
 /*
 根据这四种不同情况可以得出:
 用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行finally?一般我们认为是在return之前执行,但是更细点说,是在return中间执行。从returnValue3中可以看出,结果返回的是20,这似乎说明finally中的代码没有执行。但是从returnValue1方法返回30看出,finally确实比try中的return先执行,这岂不是自相矛盾。但是仔细想一下,其实它们是这样执行的:当执行到try中的return语句时,先用一个记录器暂时记录下返回的结果,然后执行finally中的代码,finally中如果对num重新赋了值,且有return返回,那么最终结果是重新赋值后的结果。如果finally中光赋了值,但是没有返回,num值虽然变了,但是由于没有返回,所以return记录器中的值还是之前的值。
 */
 }
 
 public static int returnValue1()
 {
 int num=10;
 try{
 num=20;
 return num;
 }
 finally{
 num=30;
 return num;
 }
 }
 
 public static int returnValue2()
 {
 int num=10;
 try{
 num=20;
 return num;
 }
 finally{
 return num;
 }
 }
 
 public static int returnValue3()
 {
 int num=10;
 try{
 num=20;
 return num;
 }
 finally{
 num=30;
 }
 }
 
 public static int returnValue4()
 {
 int num=10;
 try{
 return num;
 }
 finally{
 num=30;
 return num;
 }
 }
 }
 |