浙大JAVA 实验题答案09answer
- 格式:doc
- 大小:73.00 KB
- 文档页数:9
实验9-1 Method的使用(二)
1.程序填空题,不要改变与输入输出有关的语句。
50010 十进制转换二进制
输入一个正整数 repeat (0 输入1 个正整数n,将其转换为二进制后输出。 要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。 输出语句:System.out.print(t); //t为某位二进制数 例:括号内是说明 输入: 3 (repeat=3) 15 100 输出: 1111 1100100 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 输入1 个正整数n,计算 s 的前n项的和(保留 4 位小数)。 s = 1 + 1/2! +....+ 1/n! 要求定义并调用函数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 输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。 要求定义并调用函数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){ //递归方法