﻿<?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-Java Home-随笔分类-算法与数据结构</title><link>http://www.blogjava.net/yemoo/category/12197.html</link><description>Java技术修炼中...</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:09:26 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:09:26 GMT</pubDate><ttl>60</ttl><item><title>求最大公约数的算法</title><link>http://www.blogjava.net/yemoo/archive/2006/12/07/85984.html</link><dc:creator>Yemoo'S Java Blog</dc:creator><author>Yemoo'S Java Blog</author><pubDate>Wed, 06 Dec 2006 17:02:00 GMT</pubDate><guid>http://www.blogjava.net/yemoo/archive/2006/12/07/85984.html</guid><wfw:comment>http://www.blogjava.net/yemoo/comments/85984.html</wfw:comment><comments>http://www.blogjava.net/yemoo/archive/2006/12/07/85984.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yemoo/comments/commentRss/85984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemoo/services/trackbacks/85984.html</trackback:ping><description><![CDATA[
		<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: #008000">/**</span>
				<span style="COLOR: #008000">
						<br /> *Description:greatest common divisor<br /> *Author:yemoo 2006.12.06<br /> </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />
						<br /> </span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> Pt32{<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"> divisor1(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> m,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> n){    </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"> temp;<br />         </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(m</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">n){    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">if m&lt;n,swap m,n</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">             temp</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">m;<br />             m</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">n;<br />             n</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">temp;<br />         }<br />         </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(m</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">n</span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">){<br />             temp</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">n;<br />             n</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">m</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">n;<br />             m</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">temp;<br />         }<br />         </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> n;<br />     }<br /><br />     </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> divisor2(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> m,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> n){    </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"> temp;<br />         </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(m</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">n){<br />             temp</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">m;<br />             m</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">n;<br />             n</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">temp;<br />         }<br />         </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> divisor22(m,n);<br />     }<br /><br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> divisor22(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> m,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> n){<br />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(m</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">n</span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">){<br />            </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> n;<br />        }</span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000">{<br />            </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> divisor22(n,m</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">n);<br />        }<br />    }<br /><br />     </span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> main(String args[]){<br />         KeyboardInput in</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> KeyboardInput();<br />         Pt32 obj</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Pt32();<br />         System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">input two integer:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br />         </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> a</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">in.readInt();<br />         </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> b</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">in.readInt();<br />         System.out.println(a</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">b</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'s greatest common divisor is </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">obj.divisor2(a,b));<br />     }<br /><br /> }</span>
		</div>
		<br />使用了辗转相除法，分别使用循环和递归方法实现。<br /><br />吸取dreamstone大哥的程序写法，发现判断m、n大小的部分可以删除，因为如果m&lt;n求余部分会自动交换两个变量。<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: #008000">/**</span><span style="COLOR: #008000"><br /> *Description:greatest common divisor<br /> *Author:yemoo 2006.12.07 </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /><br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Pt32{<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"> divisor1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> m,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n){    </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"> temp;<br />         </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(m</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){<br />             temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br />             n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br />             m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br />         }<br />         </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> n;<br />     }<br /><br />     </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> divisor2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> m,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n){    </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">(m</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){<br />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> n;<br />        }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> divisor2(n,m</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n);<br />        }<br />     }<br /><br />     </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String args[]){<br />         KeyboardInput in</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> KeyboardInput();<br />         Pt32 obj</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Pt32();<br />         System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">input two integer:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">in.readInt();<br />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">in.readInt();<br />         System.out.println(a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'s greatest common divisor is </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">obj.divisor2(a,b));<br />     }<br /><br /> }</span></div><img src ="http://www.blogjava.net/yemoo/aggbug/85984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemoo/" target="_blank">Yemoo'S Java Blog</a> 2006-12-07 01:02 <a href="http://www.blogjava.net/yemoo/archive/2006/12/07/85984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>