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);
}
}