7-23 币值转换 (20 分)

7-23 币值转换 (20 分)

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

输入格式:

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

输出格式:

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

输入样例1:

813227345
输出样例1:

iYbQdBcScWhQdBeSf
输入样例2:

6900
输出样例2:

gQjB



import java.util.Scanner;
public class Main {
	/*注意以下情况:
	 * sample1 最大9位没有0
	 * sample2 不超过万,末尾多0
	 * 不超过亿,中间连续多0
	 * 最小个位数
	 * 正常中间0
	 */
	static char[] ch=new char[10];
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		long num=sc.nextLong();
		
		for(int i=0;i<10;i++){//用小写英文字母a-j顺序代表大写数字0-9
			ch[i]=(char) ('a'+i);
		}	
		f(num);
	}
	
	public static void f(long num){
		int flag=0;
		StringBuilder sb=new StringBuilder();
		if(num==0){
			System.out.println(ch[0]);
			return;
		}
		int len=(int) (Math.log10(num)+1);//长度
		//System.out.println("len:"+len);

		

		while(len>0){
//			if(len==1){
//				sb.append(ch[(int) num]);
//			}
			int t=(int) (num/Math.pow(10,len-1));
			if(t==0){ //对不同位置0进行处理
				if(flag==0){
					if(len==5){//eg:80100010
						sb.append("W");
					}
					flag=1;
					sb.append(ch[t]);
				}else{
					if(len==5){
						sb.deleteCharAt(sb.length()-1);
						sb.append("Wa");
					}
				}
			}else{
				flag=0;
				sb.append(ch[t]);
				sb.append(tostr(len));//拾、百、仟、万、亿
			}
			num=(int) (num%Math.pow(10,len-1));
			if(num==0){
				if(len>5){
					sb.append("W");
				}
				break;
			}
			len--;
			
		}
		
		System.out.println(sb);
	}
	
	public static String tostr(int len){
		String c="";
		switch(len){
		case 9:c="Y";break;
		case 8:c="Q";break;
		case 7:c="B";break;
		case 6:c="S";break;
		case 5:c="W";break;
		case 4:c="Q";break;
		case 3:c="B";break;
		case 2:c="S";break;
		}
		return c;
	}
	
}

注意:做题过程中,常常有一些情况考虑不全面,而出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值