函数格式
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);
}
}
}