JAVA基礎編程50題(4-6題)詳解

來源:互聯網
上載者:User

標籤:java原始碼   最大公約數   最小公倍數   因式分解   三元運算子嵌套   

一、描述

1、將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。

程式分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:

(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,輸出之前的所有因子。

(2)如果n!=k,但n能被k整除,則應列印出k的值,並用n除以k的商作為新的正整數n,重複執行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。

2、利用條件運算子的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

程式分析:(a>b)?a:b這是條件運算子的基本例子。

3、輸入兩個正整數m和n,求其最大公約數和最小公倍數。


二、原始碼

1、程式1

package tong.yue.hong;import java.util.Scanner;/* * 題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。程式分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。(2)如果n<>k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數n,重複執行第一步。(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。 */public class Zhiyinshu {public static void main(String[] args) {System.out.println("Please input a number bigger than one:");Scanner scan = new Scanner(System.in);int num = scan.nextInt();while (num<=1) {System.out.println("input number error,please input again!");num = scan.nextInt();}decompose(num);decompose2(num);}/** * 使用字串的拼接 * @param n */private static void decompose(int n){System.out.print(n+"=");for(int i=2;i<=n;i++){while(n%i==0 && n!=i){n/=i;System.out.print(i+"*");}if(n==i){System.out.println(i);break;}}}/** * StringBuilder將輸出結果格式化 * @param num */private static void decompose2(int num){StringBuilder sBuilder = new StringBuilder();sBuilder.append(num+"=");int i = 2;while(num!=1){if(num%i==0){sBuilder.append(i+"*");num /=i;}else {i++;}}String resulString=sBuilder.toString();System.out.println(resulString.substring(0, resulString.length()-1));}}
運行結果:



2、程式2

package tong.yue.hong;import java.util.Scanner;/** * 題目:利用條件運算子的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。程式分析:(a>b)?a:b這是條件運算子的基本例子。 * @author Administrator * */public class GradeLevel {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("Please input a score:(0-100)");int score = scanner.nextInt();while(score<0||score>100){System.out.println("Input score error,please input a score again:");score = scanner.nextInt();}//條件運算子的嵌套,如果大於等於90分就輸出等級A,否則繼續判斷是否大於等於60,若是則是B,否則為CString level = score>=90?"A":score>=60?"B":"C";System.out.println(score+"分的等級為"+level);}}
運行結果:



3、程式3

package tong.yue.hong;import java.util.Scanner;/** * 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 * @author tong * */public class CommonDivMulpi {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("Please input the first number(num>0):");int firstNum = scanner.nextInt();while(firstNum<0){System.out.println("Input error,Please input the first number again(num>0):");firstNum = scanner.nextInt();}System.out.println("Please input the second number(num>0):");int secondNum = scanner.nextInt();while(secondNum<0){System.out.println("Input error,Please input the second number again(num>0):");secondNum = scanner.nextInt();}//如果兩個數相等,則最小公倍數就是其中之一,無需調用方法判斷if (firstNum==secondNum) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+firstNum);greatCommonDivisor(firstNum,secondNum);}else {leastCommonMultiple(firstNum,secondNum);greatCommonDivisor(firstNum,secondNum);}max_min(firstNum,secondNum);}/** * 求最小公倍數:首先擷取該兩個數的較大者,若兩者中的較大者是較小者的倍數,則該較大者則為兩數最小公倍數 * 本代碼採用列舉倍數法:如果兩者不成倍數關係,則取較大數的倍數(從2開始一次往上增加), * 用該數除以較小的數,如果可以整除,該數就是要求者,否則繼續取倍數重複以上部分 * 例如:12與20的最小公倍數,20不能整除12,將20*2=40,40不能整除12 ,將20*3=60,此時60可以整除12,所以二者最小公倍數為60 * @param firstNum * @param secondNum */private static void leastCommonMultiple(int firstNum, int secondNum) {//判斷兩者中的較大者if (firstNum>secondNum) {if (firstNum%secondNum==0) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+firstNum);}else {//若兩個數互質,那麼最壞的情況就是公倍數是兩者的乘積for (int i = 2; i <= secondNum; i++) {if (firstNum*i%secondNum==0) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+firstNum*i);break;}}}}else {if (secondNum%firstNum==0) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+secondNum);}else {//若兩個數互質,那麼最壞的情況就是公倍數是兩者的乘積for (int i = 2; i <= firstNum; i++) {if (secondNum*i%firstNum==0) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+secondNum*i);break;}}}}}/** * 最大公約數求法:若兩數成倍數關係,則較小的那個數就是最大公約數 *   否則,較小數迴圈除以較小數之的所有因子(從小到大)的結果去迴圈除較大數,如果能整除,該數就是最大公約數,否則繼續迴圈 * 例如:36和10求最大公約數,36不是10的倍數,則用較小數10的因子去除較小數,除後結果去除36,則用36%(10/2)=36%5無法整除,36%(10/5)=36%2==0整除,所以最大公約數是2 * @param firstNum * @param secondNum */private static void greatCommonDivisor(int firstNum, int secondNum) {//判斷兩者中的較大者if (firstNum>secondNum) {if (firstNum%secondNum==0) {System.out.println(firstNum+"和"+secondNum+"的最大公約數為"+secondNum);}else {//若兩個數互質,那麼最壞的情況就是最大公約數是1for (int i = 2; i <= secondNum; i++) {//取出較小數的因子if (secondNum%i==0&&firstNum%(secondNum/i)==0) {System.out.println(firstNum+"和"+secondNum+"的最大公約數為"+(secondNum/i));break;}}}}else {if (secondNum%firstNum==0) {System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+firstNum);}else {//若兩個數互質,那麼最壞的情況就是最大公約數是1for (int i = 2; i <= secondNum; i++) {//取出較小數的因子if (firstNum%i==0&&secondNum%(firstNum/i)==0) {System.out.println(firstNum+"和"+secondNum+"的最大公約數為"+(firstNum/i));break;}}}}}/** * 求最大公約數和最小公倍數,使用輾轉除法,同時求最大公約數和最小公倍數 * 其中最大公約數是該兩個數中所有相同因子的乘積,而最小公倍數則是所有相同的分解因子和各自特有的因子的乘積 * @param m * @param n */private static void max_min(int firstNum, int secondNum){int m = firstNum;int n = secondNum;int temp = 1;int yinshu = 1;int beishu = m*n;//將兩數中的較小者放在前面if(n<m){temp = n;n = m;m = temp;}//使用輾轉除法while(m!=0){temp = n%m;n = m;m = temp;}yinshu = n;beishu /= n;System.out.println(firstNum+"和"+secondNum+"的最大公約數為"+yinshu);System.out.println(firstNum+"和"+secondNum+"的最小公倍數為"+beishu);}}

運行結果:



JAVA基礎編程50題(4-6題)詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.