案例描述
使用 JavaScript 编程实现:用户输入一个三位数,计算这个三位数的各个数位的总和。比如用户输入 316,
就要弹出 10。因为 316 的各个数位 3 + 1 + 6 等于 10。
算法
明显的,这个题目的难点就是如何拆解一个三位数字,即如何能够提炼出这三位数字的百位、十位和个位。
用数字 316 来举例,如何拆解里面的 3、1、6 呢?JavaScript 中没有现成的函数可以拆解一个三位数,我
们必须用一些巧妙的数学方法解决问题,这就叫算法。编程中,使用 API 往往和容易,但是提出一个好的算法
是较难的。
我们来看这个案例的算法:
个位非常好获得,我们只需要计算 316 % 10 即可,明显的,316 除以 10 的余数是 6,从而得到个位数。
十位如何获得呢?即如何从 316 中得到 1 呢?稍加思考,我们就能想到一个“曲线救国”的路线:用 316
除以 10 得到 31.6,然后取整得到 31,再计算 31 % 10 得到 1。
百位呢?对于数字 316 来说,如何得到 3 呢?可以用 316 除以 100 得到 3.16,然后取整就能得到 3 了。
至此,我们非常漂亮的获得了所有数位。可见,获得每个数位的方法各有不同,我们使用了取整、求余等操
作。如何能够快速想到这样的算法,是需要通过多写程序来不断积累的。在工作中,评判一个工程师技术的水平
如何,很重要的一个标准就是看他(她)的算法能力是不是强。同学们一定要注意培养自己的算法能力,而算法
能力的培养绝不是一朝一夕的,需要你动手写大量程序,慢慢感悟,举一反三。
案例代码
综合上一小节的算法知识,我们可以写出完整的案例代码,计算用户输入的三位数的各个数位之和:
//第一步,用户输入数字
var a = Number(prompt("请输入三位数"));
//第二步,拆分每个位数
var gewei = a % 10;
var shiwei = parseInt(a / 10) % 10;
var baiwei = parseInt(a / 100);
//第三步,算总和
var sum = gewei + shiwei + baiwei;
//第四步,输出
alert("各个数位的和是" + sum);
运行网页,在弹出的输入对话框中我们输入 925
点击确定按钮之后,弹出警告框显示结果 16,这正是 925 各个数位之和,我们验算一下结果,9 + 2 + 5
等于 16,程序编写正确。
本章作业题
1. 下面列出的变量名是否符合标识符命名规范?
① $_$ ② $ ③ a1 ④ 2nd
2. 试用有意义的英语单词以驼峰命名法命名下面的变量:
① 盒子 box 的 left 位置 ② 全部成绩总和 ③最高的语文成绩
3. 口算下面求余运算,并在控制台 REPL 环境检查你的结果是否正确:
56 % 6
41 % 4
5 % 1
1 % 5
4. 上网寻找进制转换的相关资料,然后回答下面的数字分别表示十进制的多少:
0b10101
0xabcd
0777
5. 阅读下面的程序,写出程序的输出结果。
var a = 3;
var b = 4;
var c = a++ + b++ + ++a + ++b;
console.log(c);
6. 阅读下面的程序,写出程序的输出结果。
var a = "3.2";
var b = 1.4;
var c = parseInt(a + b);
console.log(c);
7. 阅读下面的程序,写出程序的输出结果。
var a = 5 && true;
var b = false || 6;
console.log(a + b);
8. 下面 4 个表达式中,结果为 NaN 的是哪些?
① 100 / 0;
② 0 / 0;
③ parseInt("爱前端");
④ "NaNxyz" - "xyz";
9. 用户输入六边形的边长 s,然后显示它的面积 area。六边形面积计算公式是:
area =
? ?
?
? ?
10. 这一刻距离新年还有 16412947 秒,相当于多少天零多少小时零多少秒?请编程给出答案。
11. 用户输入一个 4 位数,弹出它各个数位的和。
12. 查询手册,自学 Math.ceil()和 Math.floor()的功能。