4.1for循环
阶乘计算,n!
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int i=1;
int factor = 1;
for( i=1 ; i<=n ; i=i+1 )
{
factor = factor*i;
}
System.out.println(factor);
}
4.2复合赋值
4.3控制循环
素数:只能被1和自己整除的数。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int prime = 0;
for( int i=2 ; i<n ; i++)
{
if(n%i==0)//能够被n以外的数整除
{
prime =0;
System.out.println(n+"不是素数,i="+i);
break;//当能被某一个n以外的数整除时,跳出循环,提升效率
}
}
if(prime == 1)
{
System.out.println(n+"是素数");
}
else
{
System.out.println(n+"不是素数");
}
}
4.4多重循环(100以内的素数)
要求:输出100以内的素数
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for( int n=2 ; n<100 ;n++)//输出100以内的素数
{
int prime = 1;
for( int i=2 ; i<n ; i++)
{
if(n%i==0)//能够被n以外的数整除
{
prime =0;
break;//当能被某一个n以外的数整除时,跳出循环,提升效率
}
}
if(prime == 1)
{
System.out.print(n+" ");
}
}
}
要求:凑人民币
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a50,a20,a10,a5;
int amount = in.nextInt();
OUT://out为标号,可以任取,代表其下的循环名为out
for(a50=1;a50<10;a50++)
{
for(a20=1;a20<22;a20++)
{
for(a10=1;a10<44;a10++)
{
for(a5=1;a5<85;a5++)
{
if(a50*50+a20*20+a10*10+a5*5 == amount)
{
System.out.println(a50+"张50,"+a20+"张20,"+a10+"张10,"+a5+"0张10");
break OUT;//跳出名为OUT的循环
}
}
}
}
}
}
}
4.5逻辑类型
逻辑变量:boolean(储存逻辑值true或者false)
4.6求和
目标:计算sum=1+1/2+1/3+…+1/n
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum=0.0;
for(int i=1; i<=n ;i++)
{
sum += 1.0/i;
}
System.out.println(sum);
System.out.printf("%.2f",sum);//printf代表输出有格式的结果
}
目标:计算sum=1-1/2+1/3-…+1/n(符号改变了)
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int flag = 1;
double sum=0.0;
for(int i=1; i<=n ;i++)
{
sum += flag*1.0/i;
flag = -flag;
}
System.out.println(sum);
System.out.printf("%.2f",sum);//printf代表输出有格式的结果
}
4.7求最大公约数
目标:输入两个数,输出它们的最大公约数。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int max = 1;
int number = 1;
if(a>b)
{
max = b;//最大公余数不会超过a和b中较小的哪一个
}
else
{
max = a;
}
for(int i=2; i<=max ;i++)
{
if( a%i==0 && b%i==0 )//同时能够整除a和b
{
number = i;
}
}
System.out.println(a+"和"+b+"的最大公约数:"+number);
}
辗转相除法
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int oa = a;
int ob = b;
while( b!=0 )
{
int r = a%b;
a = b;
b = r;
}
System.out.println(oa+"和"+ob+"的最大公约数:"+a);
}