JAVA基础编程50题(4-6题)具体解释

一、描写叙述

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。否则为C String 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 { //若两个数互质。那么最坏的情况就是最大公约数是1 for (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 { //若两个数互质,那么最坏的情况就是最大公约数是1 for (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); } }


执行结果:

divMul


posted @ 2017-08-18 19:05  cxchanpin  阅读(273)  评论(0编辑  收藏  举报