一道面试题,求助! 键盘输入一个正整数,如101000001010,程序输出:壹仟零壹拾亿零壹仟零壹拾圆整 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我大概发几个版本的代码吧public class Change {public String change(String m){StringBuffer re=new StringBuffer("");int i=0;int j=0;i=m.lastIndexOf(".");if(i==-1) i=m.length();String b=m.substring(0, i);char[] c=b.toCharArray();StringBuffer s=null;for(i=c.length-1,j=0;i>=0;i--,j++){s=new StringBuffer("");if(i!=c.length-1 && c[i+1]!='0')s.append(changeNum(c[i]));if(c[i]!='0'){switch (j%4){case 1:s.append("拾");break;case 2:s.append("佰");break;case 3:s.append("仟");break;default :break;}}if(j!=0 && j%8==0)s.append("亿");else if (j!=0 && j%4==0){s.append("万");}re=s.append(re);}re.append("圆");i=m.lastIndexOf(".");String d=null;if(i!=-1){d=m.substring(i+1,m.length());char[] e=d.toCharArray();if(e.length==1)if(e[0]!='0')re.append("零").append(changeNum(e[0])).append("角").toString();if(e.length==2)if(e[0]!='0' || e[1]!='0')re.append("零");if(e[0]!='0')re.append(changeNum(e[0])).append("角").toString();if(e[1]!='0')re.append(changeNum(e[1])).append("分").toString();}return re.toString();}public String changeNum(char c){String[] n={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};return n[c-'0'];}public static void main(String[] args) {Change c=new Change();System.out.println(c.change("123456.78"));}} import java.math.*;public class TestTrans { private static final String NUM="零壹贰叁肆伍陆柒捌玖"; private static final String UNIT="亿仟佰拾万仟佰拾元角分厘毫";//13位 private static final String EX_UNIT="亿拾佰仟万"; //将数值串转换成大写金额:一个循环就行了 //若数值串非法,则返回:null public static String toCapNumber(String data) { String s=checkValue(data); if(s==null){return null;}//数值串非法 if(s.charAt(0)=='0'){return "零元整";} String rs="";//最终结果串 boolean hasZero=false;//有零没有输出,则置为true int i=0,sLen=s.length(),uLen=UNIT.length(); int pos=uLen-sLen+i;//i所对应的单位串中的位置 for(;i<sLen;i++,pos++)//一个循环,即求出所有的大写金额串 { if(s.charAt(i)=='0')//若是字符'0' { hasZero=true; if(isUnit(i,sLen))//若对应单位是'亿'、万、元,则输出。 { String u=getUnit(i, sLen); if(u.endsWith("亿")&&!rs.endsWith("亿")|| u.endsWith("万")&&!rs.endsWith("亿")|| u.endsWith("元") ) { rs=rs+getUnit(i, sLen);//将单位输出 hasZero=false; } } } else {//不是'0' if(hasZero){rs=rs+"零";hasZero=false;} rs=rs+NUM.charAt(s.charAt(i)-'0')+getUnit(i, sLen); } }//for(i) 大写金额转换结束 if("分厘毫".indexOf(rs.charAt(rs.length()-1))==-1)//补整 { rs=rs+"整"; } return rs; }//大写金额转换结束 //检查数值串。不正确返回null。否则返回整数值串(小数点向右移4位) private static String checkValue(String data) { BigDecimal bd=null; BigInteger bi=null; try{ bd=new BigDecimal(data,MathContext.DECIMAL128).movePointRight(4); }catch(NumberFormatException e){ return null;} bi=(bd.add(new BigDecimal(0.5))).toBigInteger(); return bi.toString(); } //当前位置对应的单位若是亿、万、元,则返回true private static boolean isUnit(int pos,int len) { String u=getUnit(pos, len); return u.endsWith("亿")||u.endsWith("万")||u.endsWith("元"); } //返回当前位置对应的单位 private static String getUnit(int pos,int len) { int upos=UNIT.length()-len+pos; if(upos<0) { upos=-upos; if(upos%5==0){ return getStr(upos/5);} return ""+EX_UNIT.charAt(upos%5); } return ""+UNIT.charAt(upos); } //返回:亿、亿亿、亿亿亿、亿亿亿亿、。。 private static String getStr(int i) { StringBuilder sb=new StringBuilder("亿"); for(int j=1;j<=i;j++) { sb.append('亿'); } return sb.toString(); } public static void main(String[] args) { System.out.println("0.000=>"+toCapNumber("0.000")); System.out.println("0.50000=>"+toCapNumber("0.50000")); System.out.println("0.056478154e3=>"+toCapNumber("0.056478154e3")); System.out.println("2000300004000.5600=>"+toCapNumber("2000300004000.5600")); System.out.println("30000000002000000000.234=>"+toCapNumber("30000000002000000000.234")); }} 万年历 问下这样写为什么请求到不了服务器断 java除錯 在帮看个矩阵的相乘~~~~~~ xml问题 急 ACCP昆明鼎点培训中心就这样骗人 啊 大侠们请帮忙指点一下 Notepad java编译字符编码问题怎么解决 我有1个问题 请大侠们告诉我??? JDK安装过程中莫名中断,怎么解决 求 根据 limit传参分页的例子 java swing 控件问题
StringBuffer re=new StringBuffer("");int i=0;
int j=0;
i=m.lastIndexOf(".");
if(i==-1) i=m.length();
String b=m.substring(0, i);
char[] c=b.toCharArray();
StringBuffer s=null;
for(i=c.length-1,j=0;i>=0;i--,j++){
s=new StringBuffer("");
if(i!=c.length-1 && c[i+1]!='0')
s.append(changeNum(c[i]));
if(c[i]!='0'){
switch (j%4){
case 1:s.append("拾");break;
case 2:s.append("佰");break;
case 3:s.append("仟");break;
default :break;
}
}
if(j!=0 && j%8==0)
s.append("亿");
else if (j!=0 && j%4==0){
s.append("万");
}
re=s.append(re);
}
re.append("圆");
i=m.lastIndexOf(".");
String d=null;
if(i!=-1){
d=m.substring(i+1,m.length());
char[] e=d.toCharArray();
if(e.length==1)
if(e[0]!='0')
re.append("零").append(changeNum(e[0])).append("角").toString();
if(e.length==2)
if(e[0]!='0' || e[1]!='0')
re.append("零");
if(e[0]!='0')
re.append(changeNum(e[0])).append("角").toString();
if(e[1]!='0')
re.append(changeNum(e[1])).append("分").toString();
}return re.toString();
}public String changeNum(char c){
String[] n={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return n[c-'0'];
}public static void main(String[] args) {
Change c=new Change();
System.out.println(c.change("123456.78"));
}}
import java.math.*;
public class TestTrans {
private static final String NUM="零壹贰叁肆伍陆柒捌玖";
private static final String UNIT="亿仟佰拾万仟佰拾元角分厘毫";//13位
private static final String EX_UNIT="亿拾佰仟万";
//将数值串转换成大写金额:一个循环就行了
//若数值串非法,则返回:null
public static String toCapNumber(String data)
{
String s=checkValue(data);
if(s==null){return null;}//数值串非法
if(s.charAt(0)=='0'){return "零元整";}
String rs="";//最终结果串
boolean hasZero=false;//有零没有输出,则置为true
int i=0,sLen=s.length(),uLen=UNIT.length();
int pos=uLen-sLen+i;//i所对应的单位串中的位置
for(;i<sLen;i++,pos++)//一个循环,即求出所有的大写金额串
{
if(s.charAt(i)=='0')//若是字符'0'
{
hasZero=true;
if(isUnit(i,sLen))//若对应单位是'亿'、万、元,则输出。
{
String u=getUnit(i, sLen);
if(u.endsWith("亿")&&!rs.endsWith("亿")||
u.endsWith("万")&&!rs.endsWith("亿")||
u.endsWith("元") )
{
rs=rs+getUnit(i, sLen);//将单位输出
hasZero=false;
}
}
}
else
{//不是'0'
if(hasZero){rs=rs+"零";hasZero=false;}
rs=rs+NUM.charAt(s.charAt(i)-'0')+getUnit(i, sLen);
}
}//for(i) 大写金额转换结束
if("分厘毫".indexOf(rs.charAt(rs.length()-1))==-1)//补整
{
rs=rs+"整";
}
return rs;
}//大写金额转换结束
//检查数值串。不正确返回null。否则返回整数值串(小数点向右移4位)
private static String checkValue(String data)
{
BigDecimal bd=null;
BigInteger bi=null;
try{
bd=new BigDecimal(data,MathContext.DECIMAL128).movePointRight(4);
}catch(NumberFormatException e){ return null;}
bi=(bd.add(new BigDecimal(0.5))).toBigInteger();
return bi.toString();
}
//当前位置对应的单位若是亿、万、元,则返回true
private static boolean isUnit(int pos,int len)
{
String u=getUnit(pos, len);
return u.endsWith("亿")||u.endsWith("万")||u.endsWith("元");
}
//返回当前位置对应的单位
private static String getUnit(int pos,int len)
{
int upos=UNIT.length()-len+pos;
if(upos<0)
{
upos=-upos;
if(upos%5==0){ return getStr(upos/5);}
return ""+EX_UNIT.charAt(upos%5);
}
return ""+UNIT.charAt(upos);
}
//返回:亿、亿亿、亿亿亿、亿亿亿亿、。。
private static String getStr(int i)
{
StringBuilder sb=new StringBuilder("亿");
for(int j=1;j<=i;j++)
{
sb.append('亿');
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println("0.000=>"+toCapNumber("0.000"));
System.out.println("0.50000=>"+toCapNumber("0.50000"));
System.out.println("0.056478154e3=>"+toCapNumber("0.056478154e3"));
System.out.println("2000300004000.5600=>"+toCapNumber("2000300004000.5600"));
System.out.println("30000000002000000000.234=>"+toCapNumber("30000000002000000000.234"));
}}