Java作业05(第7章 常用实用类2)

本文介绍了使用Java进行阶乘计算的方法,并展示了如何利用BigInteger处理大整数运算以避免溢出。此外,还演示了如何对两个整数集合执行交集、并集和差集操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package homework05; import java.math.BigInteger; public class Ch07_3 { public static double factorial(int n) //求阶乘函数 { if(n==0) return 1; else return n* factorial(n-1); } public static BigInteger factorial2(int n){ BigInteger bigInt=null; if(n==0) { bigInt=new BigInteger("1"); return bigInt; } else{ bigInt=new BigInteger(Integer.toString(n)); return bigInt.multiply(factorial2(n-1)); } } public static void main(String[] args) { /*4、计算1+2!+3!+4!+···从第100项到200项之和*/ double f=0; for(int k=100;k<=200;k++){ f+=factorial(k); } System.out.println("1+2!+3!+4!+···从第100项到200项之和:"+f); //此时输出的值是Infinity // Infinity表示正无穷大,即大于dOUble类型所能表示的最大数值。负无穷大将输出-Infinity. // 实际上,任何计算结果只要超出double类型所能表示的最大数值,就会产生这样的结果。 //故使用大整数来处理。 BigInteger result=new BigInteger("0"); for(int k=100;k<=200;k++){ result=result.add(factorial2(k)); } System.out.println("1+2!+3!+4!+···从第100项到200项之和:"+result); } }

结果:

1+2!+3!+4!+···从第100项到200项之和:Infinity
1+2!+3!+4!+···从第100项到200项之和:792621072814943158937574954417696054502273470568077747007887743862285047941581535541498718312275086275679893343076013862361579680670972527976009279036348551929550827607601145450876014530359530008733947699274904382825444692112993342058966668017369617374101405221613980910401559347844227172278387932925351155828685624342954436057587785914951951445917696000000000000000000000000

此题正确与否有待验证。

package homework05; import java.util.HashSet; import java.util.Iterator; /* * 题目:有集合A={1,2,3,4}和B={1,3,7,9,11},编写一个应用程序输出A和B交集、并集和差集。 */ public class Ch07_4 { public static void displaySet(HashSet<Integer> temp){ Iterator<Integer> iter=temp.iterator(); while(iter.hasNext()){ Integer te=(Integer) iter.next(); System.out.print(te.intValue()+"\t"); } System.out.println();//换行。 } public static void main(String[] args) { Integer[] a={1,2,3,4}; Integer[] b={1,3,7,9,11}; HashSet<Integer> A=new HashSet<Integer>(); HashSet<Integer> B=new HashSet<Integer>(); for(int i=0;i<a.length;i++){ //初始化集合A A.add(a[i]); } for(int i=0;i<b.length;i++){ //初始化集合B B.add(b[i]); } HashSet<Integer> tempSet=(HashSet<Integer>)A.clone(); //作为中间变量 保存集合A的原始值。 A.addAll(B); //并集 System.out.print("输出A和B并集的结果:"); displaySet(A); //输出结果。 A=(HashSet<Integer>)tempSet.clone(); A.retainAll(B); //交集 System.out.print("输出A和B交集的结果:"); displaySet(A); //输出结果。 A=(HashSet<Integer>)tempSet.clone(); A.remove(B); //交集 System.out.print("输出A和B差集的结果:"); displaySet(A); //输出结果。 } }

运行结果:

输出A和B并集的结果:12347911
输出A和B交集的结果:13
输出A和B差集的结果:1234

package homework05; import java.util.Iterator; import java.util.TreeSet; /* * 题目:有10个硬盘,有两个重要的属性:价格和容量。编写一个应用程序,使用 * TreeMap<K,V>类,分别按照价格和容量排序并输出10个硬盘的详细信息。 */ //硬盘类 class HardDisk implements Comparable{ private int price; private int content; public static int flag=1;//flag作为按价格还是按容量的标志来排列。1:价格 2:容量 public HardDisk(int price,int content){ this.price=price; this.content=content; } public int compareTo(Object b){ HardDisk hd=(HardDisk)b; if(flag==1){ return(this.price-hd.price); } if(flag==2){ return(this.content-hd.content); } return 0; } public int getContent() { return content; } public void setContent(int content) { this.content = content; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } } public class Ch07_5 { public static void main(String[] args) { HardDisk[] hds={new HardDisk(40,2),new HardDisk(80,25),new HardDisk(200,40),new HardDisk(100,35), new HardDisk(150,30),new HardDisk(25,1),new HardDisk(250,38),new HardDisk(300,50), new HardDisk(270,60),new HardDisk(500,200)}; TreeSet<HardDisk> treeSet=new TreeSet<HardDisk>(); for(int i=0;i<hds.length;i++){ //默认按价格高低排序。 treeSet.add(hds[i]); } Iterator<HardDisk> iter=treeSet.iterator(); System.out.println("===详细信息==="); System.out.println("价格\t容量"); while(iter.hasNext()){ HardDisk hd=iter.next(); System.out.println(hd.getPrice()+"\t"+hd.getContent()); } // treeSet.clear(); //清除treeSet中的内容。 for(int i=0;i<hds.length;i++){ //按容量高低排序。 HardDisk.flag=2; treeSet.add(hds[i]); } Iterator<HardDisk> iter2=treeSet.iterator(); System.out.println("===详细信息==="); System.out.println("容量\t价格"); while(iter2.hasNext()){ HardDisk hd=iter2.next(); System.out.println(hd.getContent()+"\t"+hd.getPrice()); } } }

运行结果:

===详细信息===
价格容量
251
402
8025
10035
15030
20040
25038
27060
30050
500200
===详细信息===
容量价格
125
240
2580
30150
35100
38250
40200
50300
60270
200500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值