zoukankan      html  css  js  c++  java
  • 第七讲课后

    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 }
    View Code

    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 }
    View Code

    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="生成的随机数为:
    ";
    16         for(int j=0;j<10;j++)
    17         {
    18             output+=example[j]+" ";
    19             if(j==4)
    20                 output+="
    ";
    21         }
    22         double sum=0;
    23         for(int j=0;j<10;j++)
    24         {
    25             sum+=example[j];
    26             
    27         }
    28         output+="
    总和为"+sum;
    29         JOptionPane.showMessageDialog(null, output);
    30 
    31     }
    32 
    33 }
    View Code

  • 相关阅读:
    lua源码分析 伪索引
    visual studio 插件
    修改Linux内核参数 减少TIME-WAIT
    linux下编译libmysqlclient, 安装mysql-server mysql-client
    编译静态库tinyxml2
    linux下编译lua库
    在Xshell中文件内容显示乱码
    Java中的自增自减
    Integer的缓存机制
    八大基本排序
  • 原文地址:https://www.cnblogs.com/b-l-java/p/6036589.html
Copyright © 2011-2022 走看看