浙大JAVA 实验题答案09answer 下载本文

内容发布更新时间 : 2024/6/27 4:59:32星期一 下面是文章的全部内容请认真阅读。

实验9-1 Method的使用(二)

1. 程序填空题,不要改变与输入输出有关的语句。

50010 十进制转换二进制

输入一个正整数 repeat (0

要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。

输出语句:System.out.print(t); //t为某位二进制数

例:括号内是说明 输入:

3 (repeat=3) 15 100 0

输出: 1111 1100100 0

import java.util.Scanner; public class Test50010{

public static void main(String args[]){ int ri,repeat; int i,n; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ n=in.nextInt(); /*---------*/ dectobin(n); System.out.println(); } }

/*---------*/

static void dectobin(int n){ String t=\; //保存二进制数 do {

t=n%2+t; //n除2后的余数拼接到t的前面

n=n/2; //获得除2后的商

}while(n>0);

System.out.print(t); //本方法无返回值,需要在方法体中输出结果 } }

说明:本题中方法dectobin(n)的输出虽然与要求有所出入,但上传是正确的。

以下用递归算法实现方法的设计: 50001 求1 + 1/2! +....+ 1/n!

输入一个正整数repeat (0

要求定义并调用函数fact(n)计算n的阶乘。

例:括号内是说明 输入:

2 (repeat=2) 2 (n=2) 10 (n=10) 输出: 1.5 1.7183

import java.util.Scanner; public class Test50001 { public static void main(String[] args) { int ri,repeat; int i,n; double s; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1;ri<=repeat;ri++){ n=in.nextInt(); /*-----------*/

s=0;

for(i=1;i<=n;i++) s+=1.0/fact(i);

System.out.println((long)(s*10000+0.5)/10000.); } }

/*---------------*/

static double fact(int n) {// 递归方法

if(n==1)return 1;

else return n*fact(n-1); } }

50002 求a+aa+aaa+aa?a

输入一个正整数repeat (0

要求定义并调用函数fn(a,n),它的功能是返回aa?a(n个a)。例如,fn(3,2)的返回值是33。 例:括号内是说明 输入

2 (repeat=2) 2 3 (a=2, n=3) 8 5 (a=8, n=5) 输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

import java.util.Scanner; public class Test50002{

public static void main(String args[]){ int ri, repeat; int i, n,a; long sn; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ a=in.nextInt(); n=in.nextInt(); /*------------*/

sn=0;

for(i=1;i<=n;i++) sn+=fn(a,i); System.out.println(sn); } }

/*------------*/

static int fn(int a,int n){ //递归方法