第七讲课后

1.阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘。

他利用每次改变二维数组的值+每次改变棋盘

2.请编写一个程序将一个整数转换为汉字读法字符串。比如“1123”转换为“一千一百二十三”。更进一步,能否将数字表示的金额改为“汉字表达? 比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。

  1 package 七讲课后习题;
  2 /***@吕鹏博
  3  * 时间   2016年11月5日21:35:18
  4  */
  5 import java.math.BigDecimal;
  6
  7 import javax.swing.JOptionPane;
  8
  9 public class TransformNum {
 10
 11     private static final String[] CN_NUMBER = { "零", "壹", "贰", "叁", "肆",
 12             "伍", "陆", "柒", "捌", "玖" };
 13
 14     private static final String[] CN_MONETRAY_UNIT = { "分", "角", "元",
 15             "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾",
 16             "佰", "仟" };
 17     //特殊字符:整
 18     private static final String CN_FULL = "整";
 19     //特殊字符:负
 20     private static final String CN_NEGATIVE = "负";
 21
 22     //特殊字符:零元整
 23     private static final String CN_ZEOR_FULL = "零元" + CN_FULL;
 24     public static String numberTraCNMontrayUnit(double numberOfMoney) {
 25         StringBuffer sb = new StringBuffer();
 26         // -1 or 1
 27         double signum = Math.signum(numberOfMoney);
 28         // 零元整的情况
 29         if (signum == 0) {
 30             return CN_ZEOR_FULL;
 31         }
 32
 33         // 得到小数点后两位值
 34         long scale = (long) (numberOfMoney % 100);
 35         int numUnit = 0;
 36         int numIndex = 0;
 37         boolean getZero = false;
 38         // 判断最后两位数,一共有四中情况:00 = 0, 01 = 1, 10, 11
 39         if (!(scale > 0)) {
 40             numIndex = 2;
 41             numberOfMoney = numberOfMoney / 100;
 42             getZero = true;
 43         }
 44         if ((scale > 0) && (!(scale % 10 > 0))) {
 45             numIndex = 1;
 46             numberOfMoney = numberOfMoney  / 10;
 47             getZero = true;
 48         }
 49         int zeroSize = 0;
 50         while (true) {
 51             if (numberOfMoney <= 0) {
 52                 break;
 53             }
 54             // 每次获取到最后一个数
 55             numUnit = (int) (numberOfMoney % 10);
 56             if (numUnit > 0) {
 57                 if ((numIndex == 9) && (zeroSize >= 3)) {
 58                     sb.insert(0, CN_MONETRAY_UNIT[6]);
 59                 }
 60                 if ((numIndex == 13) && (zeroSize >= 3)) {
 61                     sb.insert(0, CN_MONETRAY_UNIT[10]);
 62                 }
 63                 sb.insert(0, CN_MONETRAY_UNIT[numIndex]);
 64                 sb.insert(0, CN_NUMBER[numUnit]);
 65                 getZero = false;
 66                 zeroSize = 0;
 67             } else {
 68                 ++zeroSize;
 69                 if (!(getZero)) {
 70                     sb.insert(0, CN_NUMBER[numUnit]);
 71                 }
 72                 if (numIndex == 2) {
 73                     if (numberOfMoney > 0) {
 74                         sb.insert(0, CN_MONETRAY_UNIT[numIndex]);
 75                     }
 76                 } else if (((numIndex - 2) % 4 == 0) && (numberOfMoney % 1000 > 0)) {
 77                     sb.insert(0, CN_MONETRAY_UNIT[numIndex]);
 78                 }
 79                 getZero = true;
 80             }
 81             // 让number每次都去掉最后一个数
 82             numberOfMoney = numberOfMoney / 10;
 83             ++numIndex;
 84         }
 85         // 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负
 86         if (signum == -1) {
 87             sb.insert(0, CN_NEGATIVE);
 88         }
 89         // 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整
 90         if (!(scale > 0)) {
 91             sb.append(CN_FULL);
 92         }
 93         return sb.toString();
 94     }
 95
 96     public static void main(String[] args) {
 97         String mone=JOptionPane.showInputDialog("请输入要转换的金额:");
 98         double money=Double.parseDouble(mone);
 99         BigDecimal numberOfMoney = new BigDecimal(money);
100         String s = New.numberTraCNMontrayUnit(numberOfMoney);
101         String output="你输入的金额为:【"+ money +"】            "
102         + "[" +s.toString()+"]";
103         JOptionPane.showMessageDialog(null, output,
104                 "结果如下:",
105                 JOptionPane.INFORMATION_MESSAGE );
106     }
107 }

3.前面几讲介绍过JDK所提供的BigInteger能完成大数计算,如果不用它,直接使用数组表达大数,你能实现相同的功能吗?

要求:

(1)用你的大数类实现加和减两个功能

(2)阅读BigInteger类源码,弄清楚它是使用什么算法实现加减乘除四种运算的?

(3)通过互联网查找大数运算的相关资料,给你的大数类添加乘、除、求阶乘等其它功能。

我的代码(只能实现加减):

  1 package 七讲课后习题;
  2 import java.util.Scanner;
  3 /***
  4  *
  5  * @author 吕鹏博
  6  *2016年11月6日18:16:50
  7  */
  8 public class S1{
  9         public static int[]add(int []a,int []b){
 10             int digit=0;//位数
 11             int[]c=new int[a.length];
 12             for(int i=a.length-1;i>=0;i--)
 13             {
 14                 c[i]=a[i]+b[i]+digit;
 15                 if(c[i]<10)
 16                     digit=0;
 17                 else
 18                 {
 19                     c[i]=c[i]-10;
 20                     digit=1;
 21                 }
 22             }
 23             return c;
 24     }
 25         public static int []sub(int []a,int[]b,int w)
 26         {
 27             int digit=0;
 28             int[]c=new int[a.length];
 29             for(int i=a.length-1;i>=0;i--)
 30             {
 31                 if(w<=0)
 32                 {
 33                     c[i]=b[i]-a[i]-digit;
 34                     if(c[i]>=0)
 35                     {   digit=0;}
 36                     else
 37                     {
 38                         c[i]=c[i]+10;
 39                         digit=1;
 40                     }
 41                 }
 42                     else
 43                     {
 44                         c[i]=a[i]-b[i]-digit;
 45                         if(c[i]>=0)
 46                         {digit=0;}
 47                         else
 48                         {
 49                             c[i]=c[i]+10;
 50                             digit=1;
 51                         }
 52                  }
 53              }
 54                 return c;
 55             }
 56             public static void main(String[]args){
 57                 int a[]=new int[50];
 58                 int b[]=new int[50];
 59                 int m=0;
 60                 int n=0;
 61                 int s=0;
 62                 int t=0;int w=0;
 63                 Scanner in=new Scanner(System.in);
 64                 System.out.println("请输入第一个大数:");
 65                 String aa=in.next();
 66                 System.out.println("请输入第二个大数:");
 67                 String bb=in.next();
 68                 m=a.length-aa.length();
 69                 n=b.length-bb.length();
 70                 if(aa.length()>bb.length())
 71                 {
 72                     w=1;
 73                 }
 74                 else if (aa.length()<bb.length())
 75                 {
 76                     w=-1;
 77                 }
 78                 else
 79                     {w = aa.compareTo(bb);}
 80                 for (int i = 0; i < aa.length(); i++)
 81                 {
 82                     a[m++] = aa.charAt(i) - 48;
 83                 }
 84                 for (int j = 0; j < bb.length(); j++)
 85                 {
 86                     b[n++] = bb.charAt(j) - 48;
 87                 }
 88                     int[] c = S1.add(a, b);
 89                     for (int k = 0; k < c.length; k++)
 90                     {
 91                         if (c[k] > 0)
 92                         {
 93                         s = k;
 94                         break;
 95                         }
 96                     }
 97                     System.out.print("大数相加的结果为:");
 98                     for (int i = s; i < c.length; i++) {
 99                     System.out.print(c[i]);
100                     }
101                     System.out.println();
102                     int[] d =S1.sub(a, b, w);
103                     for (int k = 0; k < d.length; k++)
104                     {
105                         if (d[k] > 0)
106                         {
107                         t = k;
108                         break;
109                         }
110                     }
111                     System.out.print("大数相减的结果为:");
112                     if (w < 0)
113                     System.out.print("-");
114                     for (int i = t; i < d.length; i++)
115                     {
116                         System.out.print(d[i]);
117                     }
118                     System.out.println();
119                     System.out.println();
120                     System.out.println();
121                     System.out.println();
122  }
123 }

4.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中。

 1 package 七讲课后习题;
 2 /**@吕鹏博
 3  * 时间   2016年11月5日21:34:34
 4  */
 5 import javax.swing.JOptionPane;
 6 public class Shuzu {
 7
 8     public static void main(String[] args) {
 9         double[] example=new double[10];
10         for(int i=0;i<10;i++)
11         {
12             example[i]=(int)(1+Math.random()*(10-1+1));
13
14         }
15         String output="生成的随机数为:\n";
16         for(int j=0;j<10;j++)
17         {
18             output+=example[j]+" ";
19             if(j==4)
20                 output+="\n";
21         }
22         double sum=0;
23         for(int j=0;j<10;j++)
24         {
25             sum+=example[j];
26
27         }
28         output+="\n总和为"+sum;
29         JOptionPane.showMessageDialog(null, output);
30
31     }
32
33 }

时间: 2024-11-05 13:32:00

第七讲课后的相关文章

Stanford机器学习---第七讲. 机器学习系统设计

本文原始版本见http://blog.csdn.net/abcjennifer/article/details/7834256 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Standford公开课mach

第七讲 stack

1. 栈(stack)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(First In Last Out, FILO).栈只有一个出口,允许新增元素(只能在栈顶上增加).移出元素(只能移出栈顶元素).取得栈顶元素等操作.在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了.因此实现非常的方便.下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top().push().pop(). size().empty() ) 2. s

(笔记)斯坦福机器学习第七讲--最优间隔分类器

本讲内容 1.Optional margin classifier(最优间隔分类器) 2.primal/dual optimization(原始优化问题和对偶优化问题)KKT conditions(KKT条件) 3.SVM dual (SVM的对偶问题) 4.kernels (核方法) 1.最优间隔分类器 对于一个线性可分的训练集合,最优间隔分类器的任务是寻找到一个超平面(w,b), 使得该超平面到训练样本的几何间隔最大. 你可以任意地成比例地缩放w和b的值,这并不会改变几何间隔的大小. 例如,

《上古天真论》第七讲文字版

上古天真论篇第七讲 主讲:徐文兵  主持:梁  冬 播出时间:2009-01-17  23:00—24:00 经文:四七,胫骨坚,发长极,身体盛壮,五七,阳明脉衰,面始焦,发始堕,六七,三阳脉衰于上,面皆焦,发始白,七七,任脉虚,太冲脉衰少,天癸竭,地道不通. 梁冬:是的,重新发现中医太美.重新发现<黄帝内经>的智慧.欢迎大家收听今天的国学堂,我是梁冬,而对面的仍然是厚朴中医学堂堂主徐文兵老师. 徐文兵:梁冬好!听众朋友们大家好! 梁冬:好,徐老师好!在上一周的时候呢我们讲到了这个女性的每七年

32位汇编第七讲,混合编程,内联汇编

32位汇编第七讲,混合编程 博客园IBinary原创 QQ:2510908331  博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 混合编程的概念,有时候我们会想,C语言可不可以调用汇编的函数,或者反过来调用 或者说C语言里面内部直接内联汇编去编写. 可以实现,静看怎么实现 一丶C语言调用汇编语言的函数 1.创建工程和代码 ①创建VC++控制台程序 FILE(文件) - NEW (新建) 然后我们打开源文件,一级一级展开,找到我们的main函数 那

蓝鸥零基础学习HTML5第七讲 常见标签及标签类型的转换

蓝鸥零基础学习HTML5第七讲 常见标签及标签类型的转换 1.常见标签-块属性的标签 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="css/reset.css"> </head> <

《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现

原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现 摘要:我们要实现的是图层符号选择器,与ArcMap中的Symbol Selector的类似.本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器.  教程目录: 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与PageLayoutControl同步 第四讲 状态栏信息的添加与实现 第五讲 鹰眼的实现 第六讲 右键菜单添加与

第七讲:HTML5中的canvas两个小球全然弹性碰撞

<html> <head> <title>小球之间的碰撞(全然弹性碰撞)</title> <script src="../js/jscex.jscexRequire.min.js" type="text/javascript"></script> </head> <body> <canvas id="mc" width="1200px&

第七讲:解析邮件内容

一.JavaMail解析邮件内容的流程 二.解析邮件内容 2.1 解析普通邮件内容 如果Message.getContentType方法返回的MIME类型为"text/*"则表示邮件内容为文本内容,此时直接调用Message.getContent方法把邮件内容保存了一个String对象中输出给浏览器即可.但是现实邮件中会有HTML格式的邮件内容时,邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为"text/plain"和&q