阿拉伯数字汉字转换题目描述阿拉伯数字汉字转换,如175020060,表示为:"175,020,060"。解题思路是将汉字的值和单位分别存放在numArrays和units两个数组中,使用全局变量ans存放解析结果。我们先从简单的数字开始,比如num=4021,从高位到低位依次取值,num的长度为n=4,所以我们对num进行1000的除膜,得到div=4和mod=21分别。div是num的最大值,mod是其余的值。然后我们给ans加上“四”和单位“千”,可以发现此时21的长度小于n-1,因为num中间有一个数字0,所以“零”需要添加到结果中。然后我们判断mod是否为0,如果不为0,继续递归,如果将value的长度减为1,直接加上对应的数。当数值达到几十万或者上亿的时候,上面的方法就不适用了,因为万后面的单位是不连续的。如果我们加上“十万零一百万”这样的连续单位,上面的方法会将544021解析为:“五十四万四千二十一”,注意多了一个万。解决方案:以“10,000”和“100,000,000”为分界点拆分数值。解析完高位数值后,我们在结果中加上单位“万”或者“亿”,然后再解析低位数值。注意,如果高位数值的最后一位为0,或者低位数值以0开头,我们需要在结果中补“零”。代码实现Java代码如下:'七','八','九'};privatestaticfinalchar[]units={'十','百','千','万','十亿'};privatestaticfinalStringBuilderans=newStringBuilder();/***使用递归的方式将转换后的结果存储到ans变量中,注意`million`和`billion`在units数组中不是连续的,所以*当数达到5或9位时,我们分开讨论。**@paramnum*/privatestaticvoidintToChineseNum(intnum){Strings=String.valueOf(num);char[]chars=s.toCharArray();intn=chars.length;//只剩下一个当number为numArrays时,直接返回numArrays数组中对应的数if(n==1){ans.append(numArrays[chars[0]-'0']);//如果num超过5位,先判断是否为亿,再拆分num}elseif(n>=5){n=n>=9?9:5;intmulti=(int)Math.pow(10,n-1);//div表示num部分的数亿或数万的值intdiv=num/multi;//mod表示值的剩余部分intmod=num%multi;//转换前面部分的值,然后加上单位百万/十亿intToChineseNum(div);ans.append(n==5?units[3]:units[4]);字符串s1=String.valueOf(div);字符串s2=String.valueOf(mod);//判断中间是否有0if(s.charAt(s1.length()-1)=='0'||s2.length()
