昨天面试的一道编程题 将人民币大写转换成数字,并且保证数据不能超过一亿
2010-04-17 13:16
477 查看
昨天面试的一道题,当时我是把答案写在纸上,也没有用IDE调
今天再写一遍,测试通过,这样也证明了我的思路是正确的。
下面这段代码还可以写得更优美点,比如用静态方法等。
/**
* 将人民币大写转换成数字,并且保证数据不能超过一亿
* @author joeho
*
*/
public class RMBFormatOutPut {
/**
* 测试输入
* @param args
*/
public static void main(String[] args) {
RMBFormatOutPut sp = new RMBFormatOutPut();
/*
String strInput="";
try {
InputStream in=new BufferedInputStream(System.in);
strInput = String.valueOf(in.read());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sp.getFormatInput(sp.getInputString(strInput)));
*/
//System.out.println(sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒捌玖")));
int result = sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒"));
if(result==0){
System.out.println("您输入的金额大于一亿,请重新输入");
}else if(result==1){
System.out.println("您输入的金额格式不对,请重新输入");
}else{
System.out.println("转换后的金额为"+result);
}
}
//定义静态常量,用于保存1~9的数字
private static final String ONE = "壹";
private static final String TWO ="貳";
private static final String THREE="叁";
private static final String FOUR="肆";
private static final String FIVE="伍";
private static final String SIX ="陸";
private static final String SEVEN="柒";
private static final String EIGHT="捌";
private static final String NINE="玖";
//定义静态常量,用于保存人民币单位
private static final String YI="亿";
private static final String WANG ="萬";
private static final String QIAN ="仟";
private static final String BAI ="佰";
private static final String SHI ="拾";
/**
* 接收用户输入,并将输入的汉字截取出来放入一个字符串数组
* 该数组用来遍历每一个汉字并用于后面的数字转换
* @param str
* @return String[]
*/
public String[] getInputString(String str){
String[] splitStr = new String[str.length()];
for(int j=0;j<str.length();j++){
splitStr[j]=String.valueOf(str.charAt(j));
}
return splitStr;
}
/**
* 将字符串数组进行遍历,并进行格式转换
* @param splitStr
* @return
*/
public int getFormatInput(String[] splitStr){
//用于接收数组中的每个元素
String strTemp="";
//用于保存数组的前一个元素,这样可以知道是单位还是数据
String preData="";
//用于格式转换后的返回值
int countData =0;
//对应单位数据统计
int shiCount = 0,baiCount=0,qianCount=0,wangCount=0;
for(int i=0;i<splitStr.length;i++){
strTemp=splitStr[i];
if(ONE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "1");
}
else if(TWO.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "2");
}
else if(THREE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "3");
}
else if(FOUR.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "4");
}
else if(FIVE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "5");
}
else if(SIX.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "6");
}
else if(SEVEN.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "7");
}
else if(EIGHT.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "8");
}
else if(NINE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "9");
}
else if(WANG.equals(strTemp)){
if(!"".equals(preData)){
preData=String.valueOf(Integer.valueOf(preData)+qianCount+baiCount+shiCount);
wangCount=Integer.valueOf(preData)*10000;
}
}
else if(QIAN.equals(strTemp)){
if(!"".equals(preData)){
qianCount=Integer.valueOf(preData)*1000;
}
}
else if(BAI.equals(strTemp)){
if(!"".equals(preData)){
baiCount=Integer.valueOf(preData)*100;
}
}
else if(SHI.equals(strTemp)){
if(!"".equals(preData)){
shiCount=Integer.valueOf(preData)*10;
}
}
else if(YI.equals(strTemp)){
//碰到亿这个单位直接返回0,保证输入的数据不大于一亿
return 0;
}
preData=strTemp;
}
countData=wangCount+qianCount+baiCount+shiCount+Integer.valueOf(strTemp);
return countData;
}
}
今天再写一遍,测试通过,这样也证明了我的思路是正确的。
下面这段代码还可以写得更优美点,比如用静态方法等。
/**
* 将人民币大写转换成数字,并且保证数据不能超过一亿
* @author joeho
*
*/
public class RMBFormatOutPut {
/**
* 测试输入
* @param args
*/
public static void main(String[] args) {
RMBFormatOutPut sp = new RMBFormatOutPut();
/*
String strInput="";
try {
InputStream in=new BufferedInputStream(System.in);
strInput = String.valueOf(in.read());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sp.getFormatInput(sp.getInputString(strInput)));
*/
//System.out.println(sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒捌玖")));
int result = sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒"));
if(result==0){
System.out.println("您输入的金额大于一亿,请重新输入");
}else if(result==1){
System.out.println("您输入的金额格式不对,请重新输入");
}else{
System.out.println("转换后的金额为"+result);
}
}
//定义静态常量,用于保存1~9的数字
private static final String ONE = "壹";
private static final String TWO ="貳";
private static final String THREE="叁";
private static final String FOUR="肆";
private static final String FIVE="伍";
private static final String SIX ="陸";
private static final String SEVEN="柒";
private static final String EIGHT="捌";
private static final String NINE="玖";
//定义静态常量,用于保存人民币单位
private static final String YI="亿";
private static final String WANG ="萬";
private static final String QIAN ="仟";
private static final String BAI ="佰";
private static final String SHI ="拾";
/**
* 接收用户输入,并将输入的汉字截取出来放入一个字符串数组
* 该数组用来遍历每一个汉字并用于后面的数字转换
* @param str
* @return String[]
*/
public String[] getInputString(String str){
String[] splitStr = new String[str.length()];
for(int j=0;j<str.length();j++){
splitStr[j]=String.valueOf(str.charAt(j));
}
return splitStr;
}
/**
* 将字符串数组进行遍历,并进行格式转换
* @param splitStr
* @return
*/
public int getFormatInput(String[] splitStr){
//用于接收数组中的每个元素
String strTemp="";
//用于保存数组的前一个元素,这样可以知道是单位还是数据
String preData="";
//用于格式转换后的返回值
int countData =0;
//对应单位数据统计
int shiCount = 0,baiCount=0,qianCount=0,wangCount=0;
for(int i=0;i<splitStr.length;i++){
strTemp=splitStr[i];
if(ONE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "1");
}
else if(TWO.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "2");
}
else if(THREE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "3");
}
else if(FOUR.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "4");
}
else if(FIVE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "5");
}
else if(SIX.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "6");
}
else if(SEVEN.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "7");
}
else if(EIGHT.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "8");
}
else if(NINE.equals(strTemp)){
strTemp=strTemp.replace(splitStr[i], "9");
}
else if(WANG.equals(strTemp)){
if(!"".equals(preData)){
preData=String.valueOf(Integer.valueOf(preData)+qianCount+baiCount+shiCount);
wangCount=Integer.valueOf(preData)*10000;
}
}
else if(QIAN.equals(strTemp)){
if(!"".equals(preData)){
qianCount=Integer.valueOf(preData)*1000;
}
}
else if(BAI.equals(strTemp)){
if(!"".equals(preData)){
baiCount=Integer.valueOf(preData)*100;
}
}
else if(SHI.equals(strTemp)){
if(!"".equals(preData)){
shiCount=Integer.valueOf(preData)*10;
}
}
else if(YI.equals(strTemp)){
//碰到亿这个单位直接返回0,保证输入的数据不大于一亿
return 0;
}
preData=strTemp;
}
countData=wangCount+qianCount+baiCount+shiCount+Integer.valueOf(strTemp);
return countData;
}
}
相关文章推荐
- 将数字金额转换成大写人民币形式
- 人民币数字转换成大写形式
- ABAP--将数字金额转换为人民币大写字符串(增加UNICODE版本)
- -------------------------SQL SERVER函数将人民币数字转换成大写形式---------------------
- 将人民币数字转换为中文大写
- 将人民币数字转换成大写形式
- 一道面试 数字转大写 java版
- 将数字金额转换成大写人民币形式(网站收到的一个方法很不错)
- .net 将数字转换为人民币大写
- 数字转换为汉语中人民币的大写
- 把人民币数字转换成中文大写
- 在Excel中将数字转换为人民币大写风格的公式
- .NET将数字转换为人民币大写;泛型;11.8
- oracle数字转换为人民币大写
- java 转换数字为人民币大写
- ABAP--将数字金额转换为人民币大写字符串(增加UNICODE版本)
- oracle把数字转换成人民币格式的大写的方法
- 数字转换成中文人民币大写
- JS数字转换为人民币大写
- 将人民币数字转换成大写形式