这几天,博主碰到了几道关于数字转汉字的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. 8.3 GOF设计模式二: 适配器模式 Adapter

    GOF设计模式二: 适配器模式 Adapter  为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式  SingleTon的三个关键点  ...

  2. IDEA外部工具配置-OpenJML篇

    帮助文档 jetbrains帮助文档:https://www.jetbrains.com/help/idea/settings-tools-external-tools.html 使用external ...

  3. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: https://github.com/hanzichi/underscore-an ...

  4. Vue-devtools 安装浏览器调试

    工欲善其事,必先利其器. 本文主要讲解Vue-devtools的安装和使用 安装方法有两个: 方法一:(前提条件需要FQ,省事省力省心方便快速) FQ =>谷歌商店 =>搜索 =>V ...

  5. ubuntu 安装nginx, 出现 Unable to locate package

    今天在初始化一台新的ubuntu 服务器时,敲上了 sudo apt-get install nginx 来安装nginx, 却发现提示:  Reading package lists... Done ...

  6. Centos7中网络及设备相关配置

    centos7中,不再赞成使用ifconfig工具,取而代之的是nmcli工具,服务管理也是以systemctl工具取代了service,这些之前版本的工具虽然在centos7中还可以继续使用,只是出 ...

  7. Cognos集成至portal平台运行报表时只出“#”

    1. 问题描述 报表集成到平台后,运行报表过程中,当多次运行后,页面只显示“#” 2. 问题分析 这是因为浏览器筛选器限制问题 3. 解决方案 在IE浏览器设置中,Internet选项-安全-自定义级 ...

  8. 安装cmake 和 opencv 4.0.0

    1.安装cmake3.5.1或更新的版本 安装gcc-c++:sudo apt-get install build-essential (或者直接执行这两条命令sudo apt-get install ...

  9. k8s 部署rabbitmq单节点

    apiVersion: extensions/v1beta1 kind: Deployment metadata: annotations: fabric8.io/iconUrl: https://r ...

  10. GDAL——命令使用专题——gdallocationinfo命令

    GDAL——命令使用专题——gdallocationinfo命令  前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数 ...