﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-子在川上曰-随笔分类-数据结构</title><link>http://www.blogjava.net/chengang/category/14925.html</link><description>　　　　逝者如斯乎不舍昼夜</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:47:09 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:47:09 GMT</pubDate><ttl>60</ttl><item><title>[数据结构.Java语言版] 1、数组，求n!</title><link>http://www.blogjava.net/chengang/archive/2006/09/06/68035.html</link><dc:creator>陈刚</dc:creator><author>陈刚</author><pubDate>Wed, 06 Sep 2006 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/chengang/archive/2006/09/06/68035.html</guid><wfw:comment>http://www.blogjava.net/chengang/comments/68035.html</wfw:comment><comments>http://www.blogjava.net/chengang/archive/2006/09/06/68035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chengang/comments/commentRss/68035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chengang/services/trackbacks/68035.html</trackback:ping><description><![CDATA[第二章数组，P31。<br />题目：设计一个可容纳40位数的注n!的程序<br /><br />我们先来设计一个可用于超长位数加乘法的数据类，有点类似于Integer一样。其测试代码如下：<br /><div><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> cn.com.chengang.algorithms.ch02.array02;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> junit.framework.TestCase;<br /><br /></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> * 对LongNumber类进行测试<br /> * <br /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> 陈刚 2006-9-6 from </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.ChenGang.com.cn</span><span style="COLOR: #008000"><br /> </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LongNumberTest </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> TestCase {<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 测试构造函数<br />     * <br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> testNew() {<br />        LongNumber n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber();<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n.value());</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 默认值为0</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000"><br />        n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0123456789</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0123456789</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n.value());<br /><br />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />            n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc88</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />            fail(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">当参数含有非数字字符时，应抛出异常</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        } </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e) {<br />            assertTrue(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />        }<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 测试加法<br />     * <br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> testAdd() {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 普通</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        LongNumber n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        LongNumber n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        LongNumber n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.add(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 有进位的</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.add(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 有一个数是零的</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.add(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 位数特长的</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">33333333333333333333333333333333333333333393</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">298</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.add(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">33333333333333333333333333333333333333333691</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 测试乘法<br />     * <br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> testMul() {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 普通</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        LongNumber n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        LongNumber n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        LongNumber n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.mul(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 有进位</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.mul(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 零</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.mul(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 多位数</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">98</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">67</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.mul(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">6566</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 位数特长的</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        n1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">5897452665</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">8755445</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        n3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n1.mul(n2);<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">51634822448510925</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, n3.value());<br />    }<br /><br />}<br /></span></div><br /><br />然后，LongNumber的实现代码如下：<br /></div><div><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> cn.com.chengang.algorithms.ch02.array02;<br /><br /></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> * 用于超长位数的加乘法，现在暂时不支持负数。&lt;br&gt;<br /> * 同时这和Integer一样是一个不变类<br /> * <br /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> 陈刚 2006-9-6 from </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.ChenGang.com.cn</span><span style="COLOR: #008000"><br /> </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LongNumber {<br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] data;<br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String dataStr;<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> LongNumber() {<br />        data </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br />        data[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br />    }<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> LongNumber(String number) {<br />        </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] bytes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> number.getBytes();<br />        data </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[bytes.length];<br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> bytes.length; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br />            data[i] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> bytes[i] </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">48</span><span style="COLOR: #000000">;<br />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (data[i] </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"> data[i] </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">)<br />                </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> IllegalArgumentException(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">参数必须是数值</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        }<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 以字符串的形式返回数值<br />     * <br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String value() {<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (dataStr </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br />            dataStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> parseString(data);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> dataStr;<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 一个工具方法，把一个int数组转化成字符串&lt;br&gt;<br />     * new int[]{1,4,5}--&gt;145<br />     * <br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> array<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> String parseString(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] array) {<br />        StringBuilder buf </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StringBuilder();<br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> c : array) {<br />            buf.append(c);<br />        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> buf.toString();<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 加法。注意：本类为不变类，本类的值不会改变<br />     * <br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> number2 被加数<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"> 加法的结果<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> LongNumber add(LongNumber number2) {<br />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> add(number2.data);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(parseString(result));<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 此方法为了和mul方法共享算法而分离出来的<br />     * <br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> data2<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] add(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] data2) {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 创建一个装相加结果的数组data3</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data.length;<br />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data2.length;<br />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (len1 </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> len2 </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> len1 : len2) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 有可能有进位，所以多加一位</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] data3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[len3];<br /><br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> len3; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到index值（从未位开始相加）。</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len2 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len3 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 相加</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (index1 </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br />                data3[index3] </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> data[index1];<br />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (index2 </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br />                data3[index3] </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> data2[index2];<br /><br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 进位判断</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (data3[index3] </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">) {<br />                data3[index3] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data3[index3] </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br />                data3[index3 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br />            }<br />        }<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 第一位数是否存在，不存在则剪去，并把剩下的值放到一个新数组中</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data3;<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (data3[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) {<br />            result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[data3.length </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 新数组位数减1</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            System.arraycopy(data3, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, result, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, result.length);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 数据复制</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 乘法<br />     * <br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> number2 被乘数<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"> 相乘的结果<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> LongNumber mul(LongNumber number2) {<br />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> number2.data.length;<br />        LongNumber result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber();<br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> len2; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> number2.data[len2 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] temp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> singleMul(n2);<br />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (i </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) {</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 向左移位，补零</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] newTemp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[temp.length </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> i];<br />                System.arraycopy(temp, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, newTemp, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, temp.length);<br />                temp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> newTemp;<br />            }<br />            String str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> parseString(result.add(temp));<br />            result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(str);<br />        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;<br />    }<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * number2是个位数:0~9<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] singleMul(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> number2) {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 创建一个装相乘结果的数组data3</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data.length;<br />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 最大可能位数</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] data3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[len3];<br /><br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> len1; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到index值（从未位开始相加）。</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> len3 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><br />            data3[index3] </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> data[index1] </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> number2;<br /><br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 进位</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (data3[index3] </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">) {<br />                data3[index3 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data3[index3] </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br />                data3[index3] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data3[index3] </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br />            }<br />        }<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 第一位数是否存在，不存在则剪去，并把剩下的值放到一个新数组中</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[] result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> data3;<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (data3[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) {<br />            result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[data3.length </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 新数组位数减1</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            System.arraycopy(data3, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, result, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, result.length);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 数据复制</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;<br />    }<br />}<br /></span></div></div><br /><br />说明：由于此类现在是为了求N!，所以暂时不支持负数<br /><br /><br />接下来我们来实现求N！，先写它的测试代码，如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> cn.com.chengang.algorithms.ch02.array02;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> junit.framework.TestCase;<br /><br /></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> * 对MathUtils类进行测试<br /> * <br /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> 陈刚 2006-9-6 from </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.ChenGang.com.cn</span><span style="COLOR: #008000"><br /> </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MathUtilsTest </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> TestCase {<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> testCalculus() {<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">24</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">120</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">720</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">87178291200</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">));<br />        assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">10888869450418352160768000000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, MathUtils.calculus(</span><span style="COLOR: #000000">27</span><span style="COLOR: #000000">));<br />    }<br /><br />}<br /></span></div><br />然后，再写它的实现代码如下：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> cn.com.chengang.algorithms.ch02.array02;<br /><br /></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> * 一个数学工具类<br /> * <br /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> 陈刚 2006-9-6 from </span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.ChenGang.com.cn</span><span style="COLOR: #008000"><br /> </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MathUtils {<br /><br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * 求N!<br />     * <br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> n<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> String calculus(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n) {<br />        LongNumber result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000"> n; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br />            LongNumber temp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LongNumber(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> i);<br />            result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> result.mul(temp);<br />        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result.value();<br />    }<br /><br />}<br /></span></div><br /><br /><br />从测试代码来看，原书自27！之后全部算错了。仔佃观察原书P35的27！的值第一位少了一个1，也许就是从这里开始出错的吧，具体错误原因我没有去给他找。<img src ="http://www.blogjava.net/chengang/aggbug/68035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chengang/" target="_blank">陈刚</a> 2006-09-06 19:06 <a href="http://www.blogjava.net/chengang/archive/2006/09/06/68035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[数据结构.Java语言版] 0.前言</title><link>http://www.blogjava.net/chengang/archive/2006/09/06/68032.html</link><dc:creator>陈刚</dc:creator><author>陈刚</author><pubDate>Wed, 06 Sep 2006 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/chengang/archive/2006/09/06/68032.html</guid><wfw:comment>http://www.blogjava.net/chengang/comments/68032.html</wfw:comment><comments>http://www.blogjava.net/chengang/archive/2006/09/06/68032.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chengang/comments/commentRss/68032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chengang/services/trackbacks/68032.html</trackback:ping><description><![CDATA[《数据结构.Java语言版》是我身边最久的一本书－－2002.4.15购于深圳华强南。那时我还是个毛头小伙，对于JAVA也就是之前一年写了一个Applet，之后便没有机会再用JAVA了。那时是PHP、ASP的天下，听得有人用JSP、JAVA就觉得实在是高人呀，面向对象的嘛。而2002的国外JAVA以前火得不能再火了，由此可见国内技术的严重滞后。<br /><br />书是买了，却一直没怎么看，最长的一次是用几天时间看了四分之三。一本书四年多了，却没有读完，实在是惭愧。由此可见“书非借不能读”这句话还是有道理的。近年来，越来越觉得扎实的基础知识的重要性，而数据结构更是必练的内功之一，也因为这个原因这本书虽有四年却一直带在身边。<br /><br />书是好书，因为数据结构的概念讲得挺清楚，读来也轻松。不过也有些不足，比如没有光盘，比如示例没有采用面向对象，但总体来说还是瑕不掩瑜的。因为数据结构这类理论性强的书和实践类的书不同，我对这类书是只看而不去运行代码，所以有没有光盘不重要。而面向对象也无所谓的，数据结构和面向对象没有太大关联。<br /><br />近年来养成了一个习惯，学东西喜欢讲心得写成文章，其实就是把过去写在纸上的笔记转写在了网上。看－＞做－＞写，这样的步骤可以让学习印象更深刻，学得也更扎实。因此，我将把我读这本书的心得记下，并用面向驱动和面向对象的方式来重写书上的代码。<br /><br /><img src ="http://www.blogjava.net/chengang/aggbug/68032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chengang/" target="_blank">陈刚</a> 2006-09-06 15:00 <a href="http://www.blogjava.net/chengang/archive/2006/09/06/68032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>