//【程序22】 题目:利用递归方法求200!。import java.util.*;class shuju{ double h;//设置成double将能进行更大数据的运算,至少比text21中的计算能力要大 shuju(double i){ h=i; }}public class _22_200jiecheng { public static void jiecheng(Vector<shuju> n,int a){ double num=0; for (int j=0 ; j<n.size(); j++){ n.elementAt(j).h=n.elementAt(j).h*a; } for (int j=0; j<n.size(); j++){ if ((n.elementAt(j).h+num)>=10){ try { num=(n.elementAt(j).h-n.elementAt(j).h)/10; n.elementAt(j+1).h=n.elementAt(j+1).h+num; n.elementAt(j).h=n.elementAt(j).h; } catch(ArrayIndexOutOfBoundsException aiobe) { num=(n.elementAt(j).h-n.elementAt(j).h)/10; n.addElement(new shuju(num)); n.elementAt(j).h=n.elementAt(j).h; } } } } public static void main(String[] args) throws Exception { _22_200jiecheng jc=new _22_200jiecheng(); Vector<shuju> n=new Vector<shuju>(); shuju m=new shuju(1); n.addElement(m);// n.addElement(1); for (int i=1 ; i<=200 ; i++){ jc.jiecheng(n,i); } for (int i=n.size() ; i>0; i--){ System.out.print((int)n.elementAt(i-1).h); } }}
涂鸦心得:
这个程序前后纠结了两天,花的时间也不少,算是有两个收获:
1.Vector动态数组的使用,这个能大能小的容量以后用的机会可能较大。但是这个指向的对象的值竟然不能直接改让人很纠结,只有新建一个类,将其指向的元素转换为一个变量,才能重新赋值,也是程序中出现众多.h的原因。
2.try-catch的使用,以前看见有程序用到try-catch就感觉很牛逼,现在自己用了用,还是挺好用的。面前所知道的就是出现异常则执行一种情况,无异常则执行另一种情况。有空了再认真学习一下。
本周还有8个程序呢,坚持。。。
转载于:https://www.cnblogs.com/aniuer/archive/2012/09/04/2670695.html