黑马程序员技术交流社区
标题:
大写中文数字转换
[打印本页]
作者:
youloveme
时间:
2014-5-7 19:06
标题:
大写中文数字转换
如何把字符串中大写中文数字转换成阿拉伯数字。大写中文数字可限制在一到九百九十九之间。
作者:
NewDemo
时间:
2014-5-7 20:54
本帖最后由 NewDemo 于 2014-5-7 21:26 编辑
类似还有一个是阿拉伯数字转中文的,比较好做。你这个题目真心不简单额,这个是我写的代码,个人感觉太麻烦了,没有处理异常
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "九百三十一";
String s2 = "三十五";
String s3 = "零";
System.out.println(getNum(s1));
System.out.println(getNum(s2));
System.out.println(getNum(s3));
}
public static int getNum(String input){
//查表法定义一到九定义的数字
int len = input.length();
String s ="零一二三四五六七八九十";
int index0 = s.indexOf(input.charAt(0));
int result = -1;
if(len == 1)
result = index0;
if(len == 2){
if(input.charAt(0) == '十')
result = s.indexOf(input.charAt(1));
else if(input.charAt(1) == '十'){
result = index0*10;
}
else{
result = index0*100;
}
}
if(len == 3){
int index2 = s.indexOf(input.charAt(2));
result = index0*10+index2;
}
if(len == 4){
int index2 = s.indexOf(input.charAt(2));
result = index0*100+index2*10;
}
if(len == 5){
int index2 = s.indexOf(input.charAt(2));
int index4 = s.indexOf(input.charAt(4));
result = index0*100+index2*10+index4;
}
return result;
复制代码
这种算法题比较考思维,但是相当耗时间,所以适当为好。。另外推荐你看下这个帖子的算法比较简单
中文数字与阿拉伯数字互转
http://blog.csdn.net/yzy0612/article/details/5843069
作者:
gentleman
时间:
2014-5-7 23:38
做了好久,发现思路不对,太坑了,我i这种做法通过字符串长度分情况那就太麻烦了,代码太长了,中文读数字有很多读法,我想可不可以把中文字符串用'百''十'切割,这样应该可以,有时间再做做,希望老师能给点辛苦分
import java.io.*;
class Demo
{
public static void main(String[] args)throws Exception
{
System.out.println(getInt());
}
public static int getInt()throws Exception
{
System.out.println("请出入零到九九九之间的中文");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String ss=bf.readLine();
int sum=0;
int num=0;
int i=0;
int len= ss.length();
if (len<5&&len>=3)
i=3;
if(len<3&&len>=1)
i=1;
for(int x=0;x<i;x+=2)
{
char ch = ss.charAt(x);
switch (ch)
{
case '一' : num=1*(int)Math.pow(10,(2-x/2));
break;
case '二' : num=2*(int)Math.pow(10,(2-x/2));
break;
case '三' : num=3*(int)Math.pow(10,(2-x/2));
break;
case '四' : num=4*(int)Math.pow(10,(2-x/2));
break;
case '五' : num=5*(int)Math.pow(10,(2-x/2));
break;
case '六' : num=6*(int)Math.pow(10,(2-x/2));
break;
case '七' : num=7*(int)Math.pow(10,(2-x/2));
break;
case '八' : num=8*(int)Math.pow(10,(2-x/2));
break;
case '九' : num=9*(int)Math.pow(10,(2-x/2));
break;
case '零' : num=0*(int)Math.pow(10,(2-x/2));
break;
default:System.out.print("输入错误");
}
sum+=num;
}
return sum;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2