7-23 币值转换 (20分)-java

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:
输入在一行中给出一个不超过9位的非负整数。

输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB

我的思路:
	1. 需要将键盘录入的字符串反转,并转化为字符数组,方便我们处理
	2. 遍历字符数组,数组元素是从低位到高位的,0-9转化为a-j,
	3. 将位按照要求转化为大写字母,拼接字符串
	4. 处理特殊情况0,重复的0,末尾的0,和重复的万后面的0
	5. 处理输入非法,输入为0的特殊情况
	6. 将处理后得到的字符串反转并输出
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		// 首先排除输入为0的情况
		if (s.equals("0")) {
			System.out.println("a");
			System.exit(0);// 退出程序
		}
		// 输入是按照从高到低,但是我们处理需要从个位到亿位.
		// 将输入的字符串反转
		StringBuffer sb = new StringBuffer(s);
		sb.reverse();
		s = new String(sb);
		// 将字符串转换为数组
		char[] ch = s.toCharArray();

		String str = "";// 最终的字符串
		int start = 0;// 标记是不是末尾的0或者万后面的0
		int f = 0;// 标记重复的0
		for (int i = 0; i < ch.length; i++) {
			char a = (char) (ch[i] + 49);// 取出字符数组,并将其转化为a~j
			String s1 = "";// 存放大写的字母
			switch (i) {
			case 1:
			case 5:
				s1 = "S";
				break;
			case 2:
			case 6:
				s1 = "B";
				break;
			case 3:
			case 7:
				s1 = "Q";
				break;
			case 4:
				s1 = "W";
				break;
			case 8:
				s1 = "Y";
				break;
			}
			if (a == 'a') {// 判断等于0的情况
				if (i == 4) {// 判断是不是万位
					str += "W";// 万位为0时需要输出W,
					start = 0;// 并且万后面的0需要输出,所以将重复0标记和末尾0去掉,

					f = 0;
				}
				if (f == 0 && start == 1) {
					//当这个0不重复,并且不是末尾的0时,输出一个0,并将重复0标志打开,
					//只有输出非0的位时才会关闭这个标志
					str += "a";
					f = 1;
				}

				continue;
			} else {//处理不为0的情况
				start = 1;//只要输出了不为0的数字,就会打开关闭重复0标志,和末尾0标志
				f = 0;
				str = str + s1 + a;
			}
		}
		//最后再将字符串反转回来输出
		sb = new StringBuffer(str);
		sb.reverse();
		System.out.println(sb);
	}
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值