这几天,博主碰到了几道关于数字转汉字的javascript算法题,在网上找了很多的答案,发现都有点复杂,于是我决定自己写一篇关于这种算法题的简单解法,以下是博主自己的见解,有不足的地方请多指教。

接下来,我给大家讲解一下几道类似的例题

一、单个数字转汉字的解决方法

1.利用数组存储0-9的汉字,代码如下:

<html>
    <head>
        <title>数字转换为汉字</title>
    </head>
    <body>
        <script type = "text/javascript">
            var ary = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
        </script>
    </body>
</html>

2.接着我们定义一个变量名为str的字符串,并赋值0,,代码如下:

var str = "";

3.那么我们该怎么把0转换为零呢?使用“对号入座”算法,代码如下:

for(var i = 0;i < ary.length;i++)
{
for(var j = 0;j < str.length;j++)
{
  if(str.charAt(j) == i)
  {
  str = ary[i];
  }
}
}

(1) ary.length和str.length不用多说,这是指ary数组和str字符串的长度。这里我们需要注意的是str.charAt(j)和ary[i],分别指在str这个字符串中索引为j的元素,在ary中索引为i的元素。

(2)在上面这段代码的意思是,从汉字数组的第一个元素开始循环字符串的每一个元素,如果字符串里有对应的数字和i相等,就把此时ary数组中索引为i的元素赋给str(因为索引刚刚好从0开始,所以0代表零)。最后我们只要把str打印出来就可以了。

二、多个数字的转换

从上面这段代码中,我们知道了如何将单个数字转换为汉字的方法,那么我们接下来就讲解多个数字转换为汉字的方法

1.在原有的代码上定义一个新的数组new_str来存储字符串的每个元素,代码如下:

var new_str = new Array(str.length);

2.将str = ary[i]改为new_str[j] = ary[i],代码如下:

new_str[j] = ary[i];

3.最后,只需要把数组打印出来就行了。

document.write(new_str);

然后博主发现一个问题,以上将1221打印为壹,贰,贰,壹,那么我们能不能把逗号去掉呢?可以的,只要写一个循环把数组打印出来,代码如下:

for(var i = 0;i < new_str.length;i++)
{
document.write(new_str[i]);
}

最后打印出来的效果是壹贰贰壹。

三、上面的这些代码只是原样打印出来,能不能打印出“23 = 贰拾三”这种代码呢?当然可以

1.能不能根据23后面的所剩下的几位数,添加不同的汉字,例如23的2后面只剩下1位那么我就在贰后面加上拾,23的3后面没有数了,那就直接打印叁,那就试试看看,代码如下:

for(var i = 0;i < new_str.length;i++)
{
switch(new_str.length - (i+1))
{
case 1:
{
new_str[i] += "拾";
break;
}
case 2:
{
new_str[i] += "佰";
break;
}
case 3:
{
new_str[i] += "仟";
break;
}
case 4:
{
new_str[i] += "万";
break;
}
}
}

以上代码我只写到了万。拾万,仟万,亿这些需要自己添加下去,所以对可以转换的数字只限制在10万以内。

最后做一下总结,上面这段代码可以把999打印为玖佰玖拾玖,但是会把800打印为捌佰零拾零,所以还是需要在switch()的case里面写一些判断的,这些需要读者们去自己加一些简单的逻辑判断。写这篇随笔的原因,是因为我TM也觉得有些人写得太复杂了,在考虑到只使用数组,循环和条件的前提下我想了这段逻辑比较合乎新手的代码来实现转换。其实我本来是想写一篇java的GC机制的随笔,但是里面涉及到的知识点有点多,只能慢慢写,所以我决定先写一篇关于为什么要配置java环境,还有关于在命令行使用javac和java的一些知识点。           -方法虽然笨,但是实用   zemengcheng

javascript 使用数组+循环+条件实现数字转换为汉字的简单方法。的更多相关文章

  1. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  2. JavaScript 基础数组循环和迭代的几种方法

    JavaScript 数组循环和迭代   (之前一直没怎么注意数组循环,今天做一道题时,用到forEach循环发现它并没有按照我想象的样子执行,总结一下数组循环) 一.第一种方法就是for()循环   ...

  3. JavaScript去除数组中重复的数字

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. JavaScript之数组循环 forEach 循环输出数组元素

    var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...

  5. javascript中数组循环的方式

    forEach循环:        arr1.forEach(function(value,i)//value 值 i 下标            {console.log([value,i])}); ...

  6. js万亿级数字转汉字的封装方法

    要求如图: 实现方法: function changeBillionToCN(c) { // 对传参进行类型处理,非字符串进行转换 if(typeof(c) != "string" ...

  7. Java比较两个数组中的元素是否相同的最简单方法

    import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(Str ...

  8. JavaScript 流程控制-循环

    1.循环 循环目的 在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作就需要重复执行某些语句 JS中的循环 在JS中,主要有三种类型的循环语句: for循环 while循环 do.. ...

  9. Javascript中将数字转换为中文的方法

    //js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...

随机推荐

  1. UML入门学习

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

  2. cmd非运行完再保存,结果显示&保存同时进行

    #coding:utf-8 """ fps信息获取到文件 """ import sys import subprocess class Lo ...

  3. git-commit Angular规范

    commit message的格式 每次提交,Commit message 都包括三个部分:Header,Body 和 Footer. <type>(<scope>): < ...

  4. 利用python解析地址经纬度和利用经纬度定位地址

    解析地址经纬度 from geopy.geocoders import Nominatim try: geolocator = Nominatim() location = geolocator.ge ...

  5. md 常用语法

    序言: 起因: 因为现在的前端基本上都用上了前端构建工具,那就难免要写一些readme等等的说明性文件,但是这样的文件一般都是.md的文件,编写的语法自然跟其他格式的文件有所区别,置于为什么要用这种格 ...

  6. 6种纯css实现loading效果

    1. <div id="loadingWrap1"> <span></span> <span></span> <s ...

  7. yml多环境配置

    配置独立各自的环境 注:如果需要修改环境测试,只需要修改spring: profiles: active: “环境名” spring: profiles: active: prd --- #开发环境配 ...

  8. 图书馆管理系统(C语言)

    /* 实现的功能 * @ 1. 录入图书的信息 * @ 2. 给定图书的编号,显示该图书的详细信息 * @ 3. 给定作者的姓名,可以显示该作者所有的书 * @ 4. 给定出版社,可以显示该出版社出版 ...

  9. MVP之高级MVP架构封装

    MVP之高级MVP架构封装 No MVP: 我们一般会这样写: public class MainActivity extends AppCompatActivity { private EditTe ...

  10. h5属性直接控制上传文件类型

    和公司前端交互的时候发现我在选择上传文件的时候只能选择图片,其他类型,text,doc等等等等全部无法选择 仔细查看了下代码,发现归功于H5新增(??没查到资料,不确定是不是H5的)的input属性 ...