Java Case Study 3

case 7:猜生日

逻辑:通过5次猜测,来猜1~31之间的数
可以通过5位二进制数来进行表示
询问5次即每次询问一位是0还是1
通过列出为1的值并确定是否在其中来判断该位的值
所需知识:

  • 二进制
  • 输入输出
  • 移位
  • 字符串拼接

思路

  • 准备代表5个集合的5个字符串,这个字符串要在内部换行
    每个集合的内容是每一位上为1时的1~31间的数字的集合

  • 准备好后开始交互
    依次询问是否在此集合中,用户输入0或者1
    第一个集合:day += answer * 1
    第二个集合:day += answer * (1<<1)
    以此类推

  • 最终day就是生日所在的号数

代码

import java.util.Scanner;
public class Case7 {
    public static void main(String[] args) {
        String set1 = "1 3 5 7\n"+
                "9 11 13 15\n"+
                "17 19 21 23\n"+
                "25 27 29 31";
        
        String set2 = "2 3 6 7\n"+
                "10 11 14 15\n"+
                "18 19 22 23\n"+
                "26 27 30 31";
        
        String set3 = "4 5 6 7\n"+
                "12 13 14 15\n"+
                "20 21 22 23\n"+
                "28 29 30 31";
        
        String set4 = "8 9 10 11\n"+
                "12 13 14 15\n"+
                "24 25 26 27\n"+
                "28 29 30 31";
        
        String set5 = "16 17 18 19\n"+
                "20 21 22 23\n"+
                "24 25 26 27\n"+
                "28 29 30 31";
        
        int day = 0;
        Scanner kb = new Scanner(System.in);
        
        System.out.print("你的生日号数在这个集合里面吗?\n");
        System.out.print(set1);
        System.out.print("\n是,请输入1,否则输入0:");
        day += kb.nextInt() * 1;
        
        System.out.print("你的生日号数在这个集合里面吗?\n");
        System.out.print(set2);
        System.out.print("\n是,请输入1,否则输入0:");
        day += kb.nextInt() * (1 << 1);
        
        System.out.print("你的生日号数在这个集合里面吗?\n");
        System.out.print(set3);
        System.out.print("\n是,请输入1,否则输入0:");
        day += kb.nextInt() * (1 << 2);
        
        System.out.print("你的生日号数在这个集合里面吗?\n");
        System.out.print(set4);
        System.out.print("\n是,请输入1,否则输入0:");
        day += kb.nextInt() * (1 << 3);
        
        System.out.print("你的生日号数在这个集合里面吗?\n");
        System.out.print(set5);
        System.out.print("\n是,请输入1,否则输入0:");
        day += kb.nextInt() * (1 << 4);
        
        System.out.println("你的生日是:"+day+" 号");
    }
    
}

case 8:“读出金额”

需求:

  • 给定5位整数2位小数的金额,将其转换为半中文大写金额
  • 89735.12 转换为 8万9千7百3十5元1角2分

限制:
由于目前掌握知识不足,还做不到全中文

思路

89735.12 * 100 = 8973512分
分别提取万 千 百 十 元 角 分
除法可以高位
取余可以高位

8973512 / 1000000 = 8
8973512 % 1000000 = 973512
973512 / 100000 = 9

输出有两种方式,①打印不换行②拼接

代码

package case8;
public class Case8 {
    public static void main(String[] args) {
       String result = "";
       double money = 98735.12;
       
       int fen = (int)(money * 100);
       int wan = fen / 1000000;
       result += (wan + "萬");
       
       fen = fen % 1000000;
       int qian = fen / 100000;
       result += (qian + "仟");
       
       fen = fen % 100000;
       int bai = fen / 10000;
       result += (bai + "佰");
       
       fen = fen % 10000;
       int shi = fen / 1000;
       result += (shi + "拾");
       
       fen = fen % 1000;
       int yuan = fen / 100;
       result += (yuan + "圆");
       
       fen = fen % 100;
       int jiao = fen / 10;
       result += (jiao + "角");
       
       fen = fen % 10;
       result += (fen + "分");
       
       System.out.println(result);
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值