您的位置:首页 > 其它

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

2015-03-07 19:58 197 查看
题目来源:

输入一个整数(位数不超过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.csdn.net/topics/390972133
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: