算法集合
来源:互联网 发布:巨人网络收购投哪网 编辑:程序博客网 时间:2024/04/30 11:24
1 写一个函数,输入int型,返回整数逆序后的字符串。
public static void main(String[] args) { System.out.println("开始"); System.out.println(fun(1234587512)); System.out.println("结束");}private static String fun(int arg0){ if(arg0/10>0){ return arg0%10+String.valueOf(fun(arg0/10)); }else{ return String.valueOf(arg0); }}
2 把金额阿拉伯数字转换为汉字表示,小数点后四舍五入保留两位。(转载)
import java.io.*;import java.lang.IllegalArgumentException;public class ConvertNum{ /** * 把金额阿拉伯数字转换为汉字表示,小数点后四舍五入保留两位 * 还有一种方法可以在转换的过程中不考虑连续0的情况,然后对最终的结果进行一次遍历合并连续的零 */ public static String [] ChineseNum = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public static String NumToChinese(double num){ if(num > 99999999999999.99 || num < -99999999999999.99)throw new IllegalArgumentException("参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!"); boolean negative = false;//正负标号 if(num<0){ negative = true; num = num*(-1); } long temp = Math.round(num*100); int numFen=(int)(temp%10);//分 temp=temp/10; int numJiao = (int)(temp%10);//角 temp=temp/10; //此时temp只包含整数部分 int [] parts =new int[20];//将金额整数部分分为在0-9999之间数的各个部分 int numParts = 0;//记录把原来金额整数部分分割为几个部分 for(int i=0;;i++){ if(temp == 0) break; int part = (int)(temp%10000); parts[i] =part; temp = temp/10000; numParts++; } boolean beforeWanIsZero = true;//标志位,记录万的下一级是否为0 String chineseStr = ""; for(int i=0;i<numParts;i++){ String partChinese = partConvert(parts[i]); if(i%2==0){//前四位,第一部分 if("".equals(partChinese)) beforeWanIsZero = true; else beforeWanIsZero = false; } if(i!=0){ if(i%2==0)//高9位,亿的部分 chineseStr = "亿"+chineseStr; else{//高5位,万的部分 if("".equals(partChinese)&&!beforeWanIsZero)// 如果“万”对应的 part 为 0,而“万”下面一级不为 0,则不加“万”,而加“零” chineseStr = "零"+chineseStr; else{ if(parts[i-1]<1000&&parts[i-1]>0)//如果万的部分不为0,而万前面的部分小于1000大于0,则万后面应该跟零 chineseStr = "零"+chineseStr; chineseStr = "万"+chineseStr; } } } chineseStr = partChinese + chineseStr; } if("".equals(chineseStr))//整数部分为0,则表示为零元 chineseStr = ChineseNum[0]; else if(negative)//整数部分部位0,但是为负数 chineseStr = "负" +chineseStr; chineseStr = chineseStr + "元"; if(numFen==0&&numJiao==0){ chineseStr = chineseStr +"整"; } else if(numFen==0){//0分 chineseStr = chineseStr +ChineseNum[numJiao] + "角"; } else{ if(numJiao==0) chineseStr = chineseStr + "零" + ChineseNum[numFen] + "分";elsechineseStr = chineseStr + ChineseNum[numJiao] + "角" + ChineseNum[numFen] + "分"; } return chineseStr; } //转换拆分后的每个部分,0-9999之间 public static String partConvert(int partNum){ if(partNum<0||partNum>10000){ throw new IllegalArgumentException("参数必须是大于等于0或小于10000的整数"); } String [] units = new String[]{"","拾","佰","仟"}; int temp = partNum; String partResult = new Integer(partNum).toString(); int partResultLength = partResult.length(); boolean lastIsZero = true;//记录上一位是否为0 String chineseStr = ""; for(int i=0;i<partResultLength;i++){ if(temp == 0)//高位无数字 break; int digit = temp%10; if(digit == 0){ if(!lastIsZero)//如果前一个数字不是0则在当前汉字串前加零 chineseStr = "零"+chineseStr; lastIsZero = true; } else{ chineseStr = ChineseNum[digit] + units[i] +chineseStr; lastIsZero = false; } temp =temp/10; } return chineseStr; } public static void main(String args []){ double num = 0; System.out.println("请输入金额数字,-1退出"); num = getInputNum(num); while(num!=-1){ System.out.println(num+NumToChinese(num)); num = getInputNum(num); } System.out.println("其他测试:"); System.out.println("100120: " + NumToChinese(100120)); System.out.println("25000000000005.999: " + NumToChinese(25000000000005.999));System.out.println("45689263.626: " + NumToChinese(45689263.626));System.out.println("0.69457: " + NumToChinese(0.69457));System.out.println("253.0: " + NumToChinese(253.0));System.out.println("0: " + NumToChinese(0)); } private static double getInputNum(double num) { try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); num = Double.parseDouble(br.readLine()); }catch(IOException e){ System.out.println(e.toString()); } return num; }}
容易混淆的地方
需要注意的地方
6/3/2015 4:42:04 PM
0 0
- 算法集合
- 集合算法
- 算法集合
- 算法集合
- 算法集合
- STL算法---集合算法
- 算法集合(C++)
- 排序算法集合
- 图片镂空算法集合
- 经典排序算法集合
- 图片镂空算法集合
- 集合竞价算法
- 经典算法集合帖
- 几个集合算法
- 排序算法集合
- STL 算法集合
- GIS算法源码集合
- Java排序算法集合
- Android中的静态系统广播和动态系统广播
- Test of MV FAST refresh with Sum and group
- linux命令
- 应用上传不成功
- poj2411Mondriaan's Dream(状态压缩dp)
- 算法集合
- c调用c++函数(包括类成员函数)的方法
- ApplePay申请MerchantID及证书配置
- redis-cli 命令总结
- 双击鼠标HOOK学习
- 破解版 Sublime text3破解版下载以及安装emmet插件,前端开发神器
- 高等数学:第一章 函数与极限(3)无穷小 连续性 间断点 连续函数
- JVM > 运行时数据区域
- 给一个类增加xib文件