零基础Java编程题第七章

函数格式

import java.util.Scanner;


public class Main {
	public static void sum(int a, int b)
	{
		int i;
		int sum;
		sum = 0;
		for ( i = a; i<=b; i++)
		{
			sum += i;
		}
		System.out.println( sum );
	}
	public static void main( String[] arg)
	{
			sum(1,10);
			sum(10,20);
			sum(35,45);
	}
}

函数类型不匹配:

1.当函数期望的参数类型比调用参数时给的值的类型宽的时候,编译器能够悄悄替你把类型转换好(char-->int-->double)

2.当函数期望的参数类型比调用函数时给的值的类型窄的时候,需要写强制类型转换 (int)5.0

3.当函数期望的参数类型与调用函数时给的类型之间无法转换的时候(boolean与int不能相互转换),传参数错误。

import java.util.Scanner;


public class Main {
	public static void swap(int a, int b)
	{
		int t;
		t = a;
		a = b;
		b = t;
	}
	public static void main( String[] arg)
	{
		int a = 5;
		int b = 6;
		swap(a,b);
		System.out.println((a) + " " + (b));
	}
}

Java语言在调用参数时,永远只能传值给函数。

函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量,本地变量不会自动初始化。

1

分解质因数(5分)

题目内容:

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

 

输入格式:

一个整数,范围在[2,100000]内。

 

输出格式:

形如:

n=axbxcxd

n=n

所有的符号之间都没有空格,x是小写字母x。

 

输入样例:

18

 

输出样例:

18=2x3x3

 

时间限制:500ms内存限制:32000kb

import java.util.Scanner;


public class Main {

	public static void main( String[] arg)
	{
		Scanner in = new Scanner(System.in);
		int number = in.nextInt();
		System.out.print(number + "=");
		for( int i = 2; i <= Math.sqrt(number); i++ )//此时必须要带等号
		{
			while( number != i )
			{
				if( number % i == 0 )			
				{
						System.out.print( i + "x" );
						number /= i;
				}
				else//不能整除后进行i++
				{
					break;
				}
			}

			
		}
		System.out.print(number);

}
}

2

完数(5分)

题目内容:

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。

现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。

 

提示:可以写一个函数来判断某个数是否是完数。

 

输入格式:

两个正整数,以空格分隔。

 

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。

 

输入样例:

1 10

 

输出样例:

6

 

时间限制:500ms内存限制:32000kb

import java.util.Scanner;


public class Main {

	public static void main( String[] arg)
	{
		Scanner in = new Scanner(System.in);
		int a = in.nextInt();
		int b = in.nextInt();
		int[] result = new int[10];//存放完数
		int number_result = 0;//完数个数
		for( int i = a; i <= b; i++ )
		{
			int[] arr = new int[1000];//存放当前i的因数
			int count = 0;
			for ( int j = 2; j < i; j++) //因数求和
			{
				if( i % j == 0 )
				{
					arr[count++] = j;
				}
			}
			int k = 0;
			int sum = 0;
			while( arr[k] != 0 )//存在当前i的因数
			{
				sum += arr[k++];
			}
			if(i == sum + 1)//判断是否为完数
			{
				if(i == 1)
				{
					continue;
				}
				result[number_result++] = i; //存放完数
			}
		}
		
		if( result[0] != 0 ) //完数输出
		{
			int i = 0;
			for( i = 0; i< number_result - 1; i++)
			{
				System.out.print(result[i] + " ");
			}
			System.out.print(result[i]);
		}

}
}

 

二进制的前导的零(10分)

题目内容:

计算机内部用二进制来表达所有的值。一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000。可以看到,从左边数过来,在第一个1之前,有27个0。我们把这些0称作前导的零。

 

现在,你的任务是写一个程序,输入一个整数,输出在32位二进制表达下它前导的零的个数。

 

输入格式:

一个整数,在32位的整数可以表达的范围内。

 

输出格式:

一个整数,表达输入被表达为一个32位的二进制数时,在第一个1之前的0的数量。

 

输入样例:

256

 

输出样例:

23

 

时间限制:500ms内存限制:32000kb

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
 
        int num = 0;
        int count = 32;
        String bStr = null;
 
        num = input.nextInt();
 
        bStr = Integer.toBinaryString(num);	//二进制转十进制函数
 
        if (num != 0) {
            System.out.println(count - bStr.length());
        } 
        else {
            System.out.println(count);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值