java数字转成中文

来源:互联网 发布:微信商城源码 编辑:程序博客网 时间:2024/06/05 06:11

最近参加校招笔试,又遇到这类题目,每次都考虑不全情况,网上查类似的,好多不全或是大写什么的,自己试着写了一下
java实现的,5位数以内的,目前除了0不行,还没发现其他bug
思路没想太多,应该有更好的,利用栈,逆序来判断数字,再添加多种情况(主要就是零的问题)
   

10要输出“十”                                      10->十

数字结尾多个零的省略                     100->一百

中间连续几个零只输出一个零         1001->一千零一

正常情况                                             12345->一万二千三百四十五



import java.util.Scanner;import java.util.Stack;public class Change_num {public static String a(int i)//输出位{if(i==0)return "";else if(i==1)return "十";else if(i==2)return "百";else if(i==3)return "千";else return "万";}public static  String b(int j)//输出数字{switch (j) {case 0:return"零";case 1:return"一";case 2:return"二";case 3:return"三";case 4:return"四";case 5:return"五";case 6:return"六";case 7:return"七";case 8:return"八";default:return "九";}}public static void main(String[] args){Stack<Integer> s1 = new Stack<Integer>();Stack<Integer> s2 = new Stack<Integer>();Stack<String> nstr = new Stack<String>();//存放中文数字的栈System.out.println("请输入一个五位以内的数字:");//输入五位数Scanner in=new Scanner(System.in);int num=in.nextInt();in.close();while(num!=0)//逆序放入第一个栈 4,3,2,1{s1.push(num%10);num=num/10;}while(s1.size()!=0)//正序放入第2个栈 1,2,3,4{s2.push((s1.pop()));}int x=s2.size();//记录栈长度//相当于逆序出栈,判断while(s2.size()!=0){int tab=s2.pop();if(x==2&&s2.size()>=1&&s2.peek()==1)//特殊情况,10的{nstr.push("十");break;}else if(tab!=0&&s2.size()>1&&s2.peek()==0)//要输出零的情况,逆序时只有当前一位不为零,下一位为零才出现零{nstr.push(a(x-1-s2.size()));nstr.push(b(tab));nstr.push("零");}else if(tab!=0)//一般情况,不用管0的{nstr.push(a(x-1-s2.size()));nstr.push(b(tab));}}while(nstr.size()!=0)//打印{System.out.print(nstr.pop());}}}


第一次写这个,留着以后方便看

转载请说明

0 0
原创粉丝点击