您的位置:首页 > 职场人生

昨天面试的一道编程题 将人民币大写转换成数字,并且保证数据不能超过一亿

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: