BASIC-20
这道题很有意思
理清思路就很容易写出来
我是用了按位if条件判断
坏处就在于
我是写了大纲之后自己测试数据
通过测试数据改自己的代码
这就导致了两个问题
- 代码分类有点乱
- 有些情况没有考虑周到
针对第一个情况,虽然代码看起来很繁琐,但是很容易看出每个判断条件的意思
针对第二个情况,我开始消极应战了,就是用直接用测试数据改bug
这样很不好,很不好!检讨!
最后我用自己的数据检测出来好多个Bug
10010 10100 500001
应该是“一万零一十”、“一万零一百”、“五十万零一”
但是我的输出是“一万一十”、“一万一百”、“五十零万零一”
但是我实在没有办法判断了,所以直接交题了
居然过了
惊了
但是这个代码有很大的问题,主要是我分类的时候没有考虑周全
所以整体大概是这么几点
- 分位数进行判断,从高到低
- 亿(9位及以上)需判断10和20这种不同的读法
- 万(5位及以上)需判断10和20这种不同的读法
- 特殊判断0的读法,判断连续零的读法(10001)和有0但不读的情况(5000,此时需要判断最后一位是否为0)
- 只有两位时的读法,“十”
- 只有一位时0的读法
可能有些疏漏,我的大脑目前十分混乱
————————二更——————————
好吧刚刚实在难受
把500001的问题解决了
是len>=5的时候不需要考虑万位的0
开心了,去睡觉
大脑目前依然十分混乱
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = new String[] { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
String[] str = new String[] { "", "shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi" };
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int len = s.length();
if (len == 10) {
if (s.charAt(0) == '1') {
System.out.print(str[9] + " ");
} else {
System.out.print(arr[s.charAt(0) - '0'] + " " + str[9] + " ");
}
}
if (len >= 9) {
if (s.charAt(len - 9) == '0') {
// if (s.charAt(len - 10) != '0')
// System.out.print(arr[0] + " ");
// System.out.print(str[8] + " ");
} else {
System.out.print(arr[s.charAt(len - 9) - '0'] + " ");
}
System.out.print(str[8] + " ");
}
if (len >= 8) {
if (s.charAt(len - 8) == '0') {
if (s.charAt(len - 9) != '0' && s.charAt(len - 7) != '0')
System.out.print(arr[0] + " ");
} else {
System.out.print(arr[s.charAt(len - 8) - '0'] + " " + str[7] + " ");
}
}
if (len >= 7) {
if (s.charAt(len - 7) == '0') {
if (s.charAt(len - 8) != '0')
System.out.print(arr[0] + " ");
} else {
System.out.print(arr[s.charAt(len - 7) - '0'] + " " + str[6] + " ");
}
}
if (len >= 6) {
if (s.charAt(len - 6) == '0') {
if (s.charAt(len - 7) != '0')
System.out.print(arr[0] + " ");
} else {
if (len > 6 && s.charAt(len - 6) == '1') {
System.out.print("yi shi ");
} else if (len == 6 && s.charAt(len - 6) == '1') {
System.out.print("shi ");
} else {
System.out.print(arr[s.charAt(len - 6) - '0'] + " " + str[5] + " ");
}
}
}
if (len >= 5) {
if (s.charAt(len - 5) == '0') {
System.out.print(str[4] + " ");
} else {
System.out.print(arr[s.charAt(len - 5) - '0'] + " " + str[4] + " ");
}
}
if (len >= 4) {
if (s.charAt(len - 4) == '0') {
if (s.charAt(len - 1) != '0') {
System.out.print(arr[0] + " ");
}
} else {
System.out.print(arr[s.charAt(len - 4) - '0'] + " " + str[3] + " ");
}
}
if (len >= 3) {
if (s.charAt(len - 3) == '0') {
if (s.charAt(len - 4) != '0' && s.charAt(len - 1) != '0')
System.out.print(arr[0] + " ");
} else {
System.out.print(arr[s.charAt(len - 3) - '0'] + " " + str[2] + " ");
}
}
if (len >= 2) {
if (len == 2) {
if (s.charAt(len - 2) != '1') {
System.out.print(arr[s.charAt(0) - '0'] + " ");
}
System.out.print(str[1] + " ");
} else {
if (s.charAt(len - 2) == '0') {
if (s.charAt(len - 3) != '0' && s.charAt(len - 1) != '0')
System.out.print(arr[0] + " ");
} else {
System.out.print(arr[s.charAt(len - 2) - '0'] + " " + str[1] + " ");
}
}
}
if (len >= 1) {
if (s.charAt(len - 1) == '0') {
if (len == 1)
System.out.print(arr[0] + " ");
} else {
System.out.print(arr[s.charAt(len - 1) - '0'] + " " + str[0] + " ");
}
}
}
}