循环-19. 币值转换(20)

本文介绍了一个Java程序,该程序能够将不超过9位数的整数转换为中文大写金额格式,遵循中文习惯使用零。通过示例展示了如何处理不同情况,如连续的零和万字的正确输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来源:

输入一个整数(位数不超过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 {

	public static void main(String[] args)
	{
		Scanner scanner = new Scanner(System.in);
		//不超过9位的非负整数
		String str = scanner.next();
		// a-j代表0-0
		char[] a = {'a','b','c','d','e','f','g','h','i','j'};
		String [] b = {"","S","B","Q","W","S","B","Q","Y"};
		//标记第i位开始,后面都是0
		int zeroAll =0;
		//前一个数字是否是0的标记
		boolean preIsZero =false;
		//万字是否已经输出
		boolean  W= false;
		char[] arr = str.toCharArray();

		for(int i=arr.length-1;i>=0;i--)
		{
			if(arr[i]=='0') zeroAll++;
			else break;
		}
		//全是0
		if(zeroAll == arr.length)
		{
			System.out.println('a');
			return ;
		}
		//用j 来记录数组下标的最大长度
		int j = arr.length-1;
		
		for(int i=0; i<arr.length-zeroAll;i++)
		{
			// 如果是0 并且 前一个0还没有输出过  || 不是0
			if( (arr[i]=='0' && !preIsZero) || arr[i]!='0') //1001
			{
				//如果是0,并且刚好在万位 并且 万还未输出过
				//输出万
				if(arr[i]=='0' && !W && arr.length-i==5 )
				{
					System.out.print("W");
					W=true;
				}
				//不是零 或者不是万位  或者万已经输出过
				else
				{
					System.out.print(a[arr[i]-'0']);
					//如果是零,把前一个是零已经输出过的标记 标为true 下一个循环使用
					if(arr[i]=='0')
						preIsZero=true;
					//否则,重置为false 下一个循环使用
					else 
						preIsZero =false;
				}
			}
			//如果不是0
			if(arr[i]!='0')
			{	//输出单位
				System.out.print(b[j-i]);
				//单位如果是W,标记为 true
				if (b[j-i].equals("W"))
				{
					W = true;
				}
			}
			
				
			
		}
		
		//从右到左的0 大于4个,并且W还没有输出
		if(zeroAll>=4 && zeroAll <8 && !W)
			System.out.print("W");
		System.out.println("");
	}
	
	
}
  


  
  
  
  
  
  

测试点4:101

测试点3:   0

测试点2:100001

参考 http://bbs.youkuaiyun.com/topics/390972133

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值