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

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务