输入两个正整数m和n,求其最大公约数和最小公倍数
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数:");
int m = scan.nextInt();
System.out.println("请输入第二个正整数:");
int n = scan.nextInt();
//获取最大公约数
//1.获取两个数中的较小值
int min = (m <= n)? m : n;
//2.遍历
for(int i = min;i >= 1 ;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数为:" + i);
break;//一旦在循环中执行到break,就跳出循环
}
}
//获取最小公倍数
//1.获取两个数中的较大值
int max = (m >= n)? m : n;
//2.遍历
for(int i = max;i <= m * n;i++){
if(i % m == 0 && i % n == 0){
System.out.println("最小公倍数:" + i);
break;
}
}
}
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
1. 不在循环条件部分限制次数的结构:for( ; ; ) 或 while(true)
2. 结束循环有几种方式?
方式一:循环条件部分返回false
方式二:在循环体中,执行break
class ForWhileTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNumber = 0;//记录正数的个数
int negativeNumber = 0;//记录负数的个数
for(;;){//while(true){
int number = scan.nextInt();
//判断number的正负情况
if(number > 0){
positiveNumber++;
}else if(number < 0){
negativeNumber++;
}else{
//一旦执行break,跳出循环
break;
}
}
System.out.println("输入的正数个数为:" + positiveNumber);
System.out.println("输入的负数个数为:" + negativeNumber);
}
}
输出菱形
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
public static void main(String [] args){
//控制输出前五行
for(int i=1;i<=5;i++){
//控制每一行空白输出
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
//控制每一行星号输出
for(int j=1;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
//控制输出后四行
for(int i=1;i<=4;i++){
for(int j=1;j<=i;j++){
System.out.print(" ");
}
for(int j=1;j<=5-i;j++){
System.out.print("* ");
}
System.out.println();
}
}
100以内的所有质数的输出
100以内的所有质数的输出:
质数=素数:只能被1和它本身整除的自然数。
-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。
最小的质数是:2
方式一:(效率较低)
public static void main(String[] args) {
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
for(int i = 2;i <= 100;i++){//遍历100以内的自然数
for(int j = 2; j < i ;j++){//j:被i去除
if(i % j == 0){ //i被j除尽
isFlag = false;
//break;[3](但凡实数本身可以被非1和本身以外的数整除,就直接确定为非素数,直接跳出循环)
}
}
if(isFlag == true){
System.out.println(i);
}
isFlag = true; //重置isFlag
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
}
}
方式二:
label:for(int i = 2;i <= 100;i++){
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){
continue label;//与break不同点为:break跳出内循环继续向下执行,continue直接跳到外层循环
}
}
//能执行到此步骤的,都是质数(break无论是否为质数都会执行到此处)
System.out.println(i);
}
- - - - - - - - - - - - - - - - - - - - - [刷新]
[1]用于测量程序运行时间;
[2] for(int j = 2; j <= Math.sqrt(i); j++)-------优化一:对本身是质数的自然数是有效的。
[3] 优化二:只对本身非质数的自然数是有效的。