蓝桥杯JAVA练习0210-BASIC20笔记

BASIC-20

题目链接

这道题很有意思
理清思路就很容易写出来
我是用了按位if条件判断
坏处就在于
我是写了大纲之后自己测试数据
通过测试数据改自己的代码
这就导致了两个问题

  • 代码分类有点乱
  • 有些情况没有考虑周到

针对第一个情况,虽然代码看起来很繁琐,但是很容易看出每个判断条件的意思
针对第二个情况,我开始消极应战了,就是用直接用测试数据改bug
这样很不好,很不好!检讨!
最后我用自己的数据检测出来好多个Bug
10010 10100 500001
应该是“一万零一十”、“一万零一百”、“五十万零一”
但是我的输出是“一万一十”、“一万一百”、“五十零万零一”
但是我实在没有办法判断了,所以直接交题了
居然过了
惊了
但是这个代码有很大的问题,主要是我分类的时候没有考虑周全

所以整体大概是这么几点

  1. 分位数进行判断,从高到低
  2. 亿(9位及以上)需判断10和20这种不同的读法
  3. 万(5位及以上)需判断10和20这种不同的读法
  4. 特殊判断0的读法,判断连续零的读法(10001)和有0但不读的情况(5000,此时需要判断最后一位是否为0)
  5. 只有两位时的读法,“十”
  6. 只有一位时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] + " ");
			}
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值