Java语言程序设计(第3版)
上QQ阅读APP看书,第一时间看更新

3.3 示例学习

3.3.1 任意抽取一张牌

从一副纸牌中任意抽取一张,并打印出抽取的是哪一张牌。一副牌有4种花色:黑桃、红桃、梅花和方块。每种花色有13张牌,共有52张牌。可以将这52张牌编号,为0~51。规定编号0~12为黑桃,13~25为红桃,26~38为梅花,39~51为方块。

可以使用整数的除法运算来确定是哪一种花色,用求余数运算确定是哪一张牌。例如,假设抽出的数是n,计算n/13的结果,若商为0,则牌的花色为黑桃;若商为1,则牌的花色为红桃;若商为2,则牌的花色为方块;若商为3,则牌的花色为梅花。计算n%13的结果可得到第几张牌。

程序3.10 PickCards.java

下面是程序的一次运行结果:

3.3.2 求最大公约数

两个整数的最大公约数(greatest common divisor,GCD)是能够同时被两个数整除的最大整数。例如,4和2的最大公约数是2,16和24的最大公约数是8。

求两个整数的最大公约数有多种方法。一种方法是,假设求两个整数m和n的最大公约数,显然1是一个公约数,但它可能不是最大的。可以依次检查k(k=2,3,4,…)是否是m和n的最大公约数,直到k大于m或n为止。

程序3.11 GCD.java

下面是程序的一次运行结果:

计算两个整数m与n的最大公约数还有一个更有效的方法,称为辗转相除法或称欧几里得算法,其基本步骤如下:计算r = m%n,若r == 0,则n是最大公约数;若r != 0,执行m = n, n = r,再次计算r = m%n,直到r==0为止,最后一个n即为最大公约数。请读者自行编写程序实现上述算法。

3.3.3 打印输出若干素数

素数(prime number)又称质数,有无限个。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数。下面的程序计算并输出前50个素数,每行输出10个。

程序3.12 PrimeNumber.java

程序输出结果如下: