这几天,博主碰到了几道关于数字转汉字的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. Educational Codeforces Round 41 (Rated for Div. 2)F. k-substrings

    题意比较麻烦略 题解:枚举前缀的中点,二分最远能扩展的地方,lcp来check,然后线段树维护每个点最远被覆盖的地方,然后查询线段树即可 //#pragma GCC optimize(2) //#pr ...

  2. Flask Vue.js全栈开发

    Flask Vue.js全栈开发的 最新完整代码 及使用方式 本系列的最新代码及使用方式将持续更新到: http://www.madmalls.com/blog/post/latest-code/ 1 ...

  3. 接前一篇:new select option保存搜索条件

    WD_SELECT_OPTIONS_20新加了很多好玩的东西,尤其是里面的保存搜索条件和使用保存的搜索条件.因为这个比较想WEB UI,所以兴趣比较高一点,WEB UI里是把参数拼成XML存起来的,我 ...

  4. ThinkPHP5.0源码学习之缓存Cache(一)

    一.文件 1.缓存配置文件:thinkphp\convention.php 2.缓存文件:thinkphp\library\think\Cache.php 3.驱动目录:thinkphp\librar ...

  5. [bzoj P4504] K个串

    [bzoj P4504] K个串 [题目描述] 兔子们在玩k个串的游戏.首先,它们拿出了一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计一次 ...

  6. SharePoint CU、Hotfix和SP版本的区别

    1.Hotfix:通常是对一个特殊问题的修复包 2.CU(Cumulative Update):Hotfix的集合,包含从上一个SP(Service Pack)版本以来所有的Hotfix 3.SP(S ...

  7. yield的表达式形式与内置函数

    yield的功能: 1. 与return类似,都可以返回值,不一样在于,yield可以返回多个值而且可暂停,再次执行可继续下一步操作,return到了就停止不在继续运行. 2.为封装好的的函数能够使用 ...

  8. java判断一个字符串是否为空,isEmpty和isBlank的区别

    转载于:https://blog.csdn.net/liusa825983081/article/details/78246792 实际应用中,经常会用到判断字符串是否为空的逻辑 比较简单的就是用 S ...

  9. js操作对象

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. [图形学]VS2017中OpenGL的下载及安装中的异常

    1.放dll文件:C:\Windows\SysWOW64 或C:\Windows\windows32 2.lib和h:C:\Program Files (x86)\Microsoft Visual S ...