阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]
阿拉伯数转中文与英文
- 前言
- 一、阿拉伯数字转换
- 1、阿拉伯数字转中文
- a、案例
- b、解决方案
- 2、阿拉伯数转英文
- a、案例
- b、解决方案
- 总结
- 参考文献
前言
如果思考算法的解法方案是一种模拟,那么这一般不是个好的解决方案。对于一个复杂的问题,挖掘其中的规律,把问题抽象处理统一解决,这样代码才会简洁清晰。
一、阿拉伯数字转换
1、阿拉伯数字转中文
a、案例
b、解决方案
将数字分解成三部分,亿 & 万 & 无单位,通过for循环分片出来即可,三部分处理方式是一样的,唯一不同的就是最后的单位添加。
而对于每一部分,具体的处理方式一样,分成个十百千四个级别,所有用一个函数统一处理即可。
注:需要注意到细节,
1.只有一种前导为零的情况要特殊处理;
2.每部分末尾不能为0;
3.多个零只能写一个;
4.有零的时候表不表达出来要根据前面是否为0;
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param n int整型* @return string字符串*/public String num2cn (int n) {// 唯一一个前导可以为零!if (n == 0) return "零";// 统一为正数处理。boolean isNeg = n < 0;n = Math.abs(n);// 把规律抽象出来,// 将这个数字分成三部分,亿 & 万 & 无单位// 每一部分,末尾是不能以0结尾的;多个零只能用一个零表示。StringBuilder sb = new StringBuilder();for (int i = 2, unit = (int)1e8; i >= 0; i--, unit /= 1e4) {int part = n / unit;if (part != 0) {sb.append(toChinese(part)).append(units[i]);n %= unit;}}String rs = sb.toString();// 特殊情况,一十开头变成十。if ("一十".equals(rs.substring(0, 2))) rs = rs.substring(1);// 前缀是否为负,要加上。if (isNeg) rs = "负" + rs;return rs;}boolean preIsZero = true;// 只要前面有非零数,那么零就需要表达出来。public String toChinese(int num) {StringBuilder sb = new StringBuilder();// 分成四个部分处理,千 & 百 & 十 & 个位for (int i = 3, unit = (int)1e3; i >= 0; i--, unit /= 10) {int cur = num / unit;if (cur != 0) {sb.append(chinese[cur]).append(base[i]);preIsZero = false;} else if (!preIsZero) {sb.append(chinese[cur]);preIsZero = true;}num %= unit;}// 每一部分,都不能以零结尾。if ("零".equals(sb.substring(sb.length() - 1))) {// 如果为零,还得更改preIsZero,设置为false,毕竟把零给去了。preIsZero = false;sb.deleteCharAt(sb.length() - 1);}return sb.toString();}static String[] chinese =new String[] {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};static String[] base = new String[] {"", "十", "百", "千"};static String[] units = new String[] {"", "万", "亿"};
}
2、阿拉伯数转英文
a、案例
b、解决方案
同样采用抽象统一的思想,规律也很容易发现,每三个数分为一趴,单位分别为Billion Million Thousand 无单位。
注:和中文不同的时,十几和其他两位数的处理方式。
class Solution {// num的范围从0-20亿。// 数字转英文,不同于中文,// 右到左每三位一组划分,Millon,Thousand,结尾,3位用一个函数获取转换后的结果,当作最低三位。public String numberToWords(int num) {if(num == 0) return "Zero";StringBuilder sb = new StringBuilder();for(int i = 3,unit = (int)1e9;i >= 0;i--,unit /= (int)1e3){int cur = num / unit;if(cur != 0){sb.append(toEnglish(cur)).append(thousands[i]).append(' ');num %= unit;}}return sb.toString().trim();}public String toEnglish(int num){StringBuilder sb = new StringBuilder();int i = num / 100;if(i != 0) sb.append(singles[i]).append(" Hundred ");num %= 100;i = num / 10;if(i > 1) {sb.append(tens[i]).append(' ');num %= 10;}if(num == 0) return sb.toString();if(num < 10) sb.append(singles[num]).append(' ');else sb.append(teens[num % 10]).append(' ');return sb.toString();}String[] singles = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] teens = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};String[] tens = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};String[] thousands = {"", "Thousand", "Million", "Billion"};
}
总结
1)模拟不是算法,算法需要抽象问题,让问题有统一简洁的处理方式,抓住规律才能让问题简单起来。
2)善用数据结构,善用空间存储,降低时间复杂度,比如常用的数组,是一个很好用的数组hash。
参考文献
[1] LeetCode 阿拉伯数转中文
[2] LeetCode 阿拉伯数转英文
阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]相关推荐
- python数字转换成中文大写_python初学者笔记(2):阿拉伯数字转换成中文大写
题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): 1 #-*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码 ...
- mysql 16进制字符串转中文_mysql如何把16进制转换成中文字符显示
匿名用户 1级 2012-07-06 回答 oracle的是这样的: Oracle数据库中向BLOB类型字段插入字符串并把插入的BLOB数据转换成字符串显示的方法 首先先在数据库中创建一张表 crea ...
- java中文句号转换英文句号_java实现中文或其他语言及标点符号等转换成unicode字符串,或unicode的16进制码转换回文字或符号等...
packageorg.analysisitem20181016.test;public classCode128Test2019052201 {public static final String U ...
- NLP对数据集进行(词性标注):将所有的词性进行汇总并且编号;将所有的英文词对应的词性转换成编号,得到list
我最近在做一个自然语言处理的作业,词性标注 首先对词性标注的数据集进行处理 直接上代码,我再解释一下 # -*- coding: utf-8 -*-import nltkdef trans_chaTo ...
- C语言-译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
例如,可以将以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D.字母按上述规律转换,非字母字符保持原状不变,如"China! ...
- python把数字阿拉伯数字转换成中文10以内_Python实现把数字转换成中文
#!/usr/bin/python #-*- encoding: utf-8 -*- import types class NotIntegerError(Exception): pass class ...
- unity 只输入中英数_UITextField只限中文、英文、数字输入和限制字符个数的实现方法...
写在前面 一般情况下一个字母.符号.数字相当于一个字符,一个汉字相当于两个字符,一个emoji表情相当于两个或更多字符.本文要实现的是在UITextField只允许输入一定字符数的中文.英文和数字,不 ...
- jmeter切换到中文_Jmeter转换成中文模式
本片文章转至:https://blog.csdn.net/him2014/article/details/79603887 下载安装好Jmeter后默认的是英文,对于我这种学渣来说简直就是受到了100 ...
- java如何将中文转换成byte数组
作为一名程序员,有时候会在想,java是如何将一个中文字符,转化成一个byte数组,是如果从一个byte数组转化成字符的呢? 其实大家都知道utf-8英文占1个字节,中文占3个字节,GBK中文英文都占 ...
最新文章
- Failed to fetch http://mirrors.cloud.aliyuncs.com/
- 一起来开发Android的天气软件(一)——功能规格介绍
- java中什么是递归_java中什么是递归
- kv存储对抗关系型数据库
- PHP的静态变量和引用函数
- 驱动多个二相四线制步进电机的Proteus仿真
- 论文阅读:Siam-RPN
- 徐小凤将现身东方卫视跨年晚会 为63岁庆生
- 斐波那契数列——java实现
- 锐浪报表 Grid++Report uniGUI Web表格打印
- 计算机毕业论文初稿,毕业论文初稿一般写多久
- 安装chrome插件:FireShot
- 三星 android 调试模式设置,三星galaxy s4 usb调试在哪里 s4 usb调试模式设置方法详解...
- 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)
- 如何开通微信商城?微商城的开通方法?
- 凯撒密码解密加密(C语言)
- 游戏封网卡mac地址后修改网卡mac地址
- 设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径,提供计算面积的方法。为上述Cricle类添加一个方法,计算一个点(Point)是否在圆内
- Excel转PDF基于Microsoft.Office.Interop.Excel
- 控制器(Controller)规范
热门文章
- 流体力学-----动量方程的推导和理解---NS方程
- 东文财 赵栋 罗松 201771010106《面向对象程序设计(java)》实验14
- 建模师能干到多少岁?
- 建模师的前景怎么样?
- 自动气象站解决方案 案例分享
- 学术顶会再突破!计算平台 MaxCompute 论文入选国际顶会VLDB 2021
- GD32F4—RTC闹钟及自动唤醒中断配置详解
- 通过数组指针给二维数组赋值
- 软件工程基础个人项目——数独(5)
- has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check